我有两个表格,一个用于MainCourse,一个用于SubCourse。 MainCourse不一定需要一个子课程,因此SubCourse表中没有任何与MainCourse ID链接的空值...左空加入Linq,可空参考
我必须在linq中创建左连接...我可以创建一个正常的连接,但问题是,当我运行连接时,只有数据会显示哪一个既有MainCourse又有SubCourse。我需要显示MainCourse不具有SubCourse以及..
这是我做了什么:
带回了仅既有MainCourse和SubCourse
var query = (from mc in context.SkillAssessCourseMains
join sc in context.SkillAssessCourseSubs
on mc.ID equals sc.MainCourseRef
select new
{
sc.ID,
mc.CourseName,
sc.SubCourseName
}).DefaultIfEmpty().ToList();
试图修改数据这将带回所有数据给我一个错误:由于物化值为null,所以强制转换为值类型'Int32'失败。结果类型的泛型参数或查询都必须使用可为空的类型。 (下面的代码)
var query = (from mc in context.SkillAssessCourseMains
from sc in context.SkillAssessCourseSubs.Where(sc => sc.MainCourseRef == mc.ID).DefaultIfEmpty()
select new
{
sc.ID,
mc.CourseName,
sc.SubCourseName
}).ToList();
我知道错误是作为一个结果,有一个子模块没有联系..
我也试过这样:
var query = (from mc in context.SkillAssessCourseMains
join sc in context.SkillAssessCourseSubs
on mc.ID equals sc.MainCourseRef into results
from r in results.DefaultIfEmpty()
select new
{
r.ID,
mc.CourseName,
r.SubCourseName
}).ToList();
这也给了我一个错误:由于物化值为空,转换为值类型'Int32'失败。结果类型的泛型参数或查询都必须使用可为空的类型。
的表被设计为:
MainCourse: ID, CourseName
SubCourse: ID, SubCourseName, MainCourseRef
可有人请点我在正确的方向或者告诉我什么,我做错了什么?任何帮助将不胜感激....
EDIT数据的
实施例:
MainCourse表:
ID MainCourseName
1 Health & Safety
2 Customer Care
SubCourse表:
ID SubCourseName MainCourseRef
1 Introduction 1
2 First Aid 1
3 SHE rep course 1
因此,我想回来的数据是:
MainCourseName SubCourseName
Healt & Safety Introduction
Healt & Safety First Aid
Healt & Safety SHE rep course
Customer Care NULL
的ID为好,但也可以是无论是从SubCourse或MainCourse表....
MainCourseRef是一个整数值(以分贝(SubCourse表的外键)MainCourse表的ID) ....问题是,有些MainCourseRef在SubCourse表中为null,因为并非所有主要课程都有SubCourse ... – Kerieks 2014-08-27 10:53:49
然后试试这个'on mc.ID equals sc.MainCourseRef == null?0:sc.MainCourseRef' – 2014-08-27 11:02:29
或者你可以试试如何编辑回答 – 2014-08-27 11:07:21