2014-08-27 79 views
1

我有两个表格,一个用于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表....

回答

1

错误因为mc.ID是int,但是sc.MainCourseRef是不是int。

如果MainCourseRef是输入 “MainCourse” 然后尝试此

on mc.ID equals sc.MainCourseRef.ID 

EDIT

var query = (from mc in context.SkillAssessCourseMains 
         join sc in context.SkillAssessCourseSubs.Where(x=>x.MainCourseRef!=null) 
         on mc.ID equals sc.MainCourseRef into results 
         from r in results.DefaultIfEmpty() 
         select new 
         { 
          r.ID, 
          mc.CourseName, 
          r.SubCourseName 
         }).ToList(); 
+0

MainCourseRef是一个整数值(以分贝(SubCourse表的外键)MainCourse表的ID) ....问题是,有些MainCourseRef在SubCourse表中为null,因为并非所有主要课程都有SubCourse ... – Kerieks 2014-08-27 10:53:49

+0

然后试试这个'on mc.ID equals sc.MainCourseRef == null?0:sc.MainCourseRef' – 2014-08-27 11:02:29

+0

或者你可以试试如何编辑回答 – 2014-08-27 11:07:21