2014-08-27 99 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