2013-05-21 73 views
3

嘗試使用Linq進行連接。 我應該使用什麼?左連接還是右連接?使用LINQ Entity-Framework進行左連接或右連接

 APPLICANT TABLE       PROFILE TABLE 
APPLICANT_ID|profile_id|Applicant_Name| |profile_id|Applicant_Name 
     1  | NULL | RAY HEAVENS | | 1  | MARK LAPID 
     2  | NULL | BEN TULFO | | 2  | SUPER MAN 
     3  |  1 |  NULL | | 3  | BRANDON KNIGHT 
     4  |  2 |  NULL | | 
     5  |  3 |  NULL | | 

DESIRED OUTPUT: 

APPLICANT_ID | Applicant_Name 
     1  | RAY HEAVENS 
     2  | BEN TULFO 
     3  | MARK LAPID 
     4  | SUPERMAN 
     5  | BRANDON KNIGHT 

這是我在我的控制器代碼:

var applicantList = (from a in context.Profiles 
        join app in context.APPLICANTs 
        on a.PROFILE_ID equals app.Profile_id into output 
        from j in output.DefaultIfEmpty(new APPLICANT()) 
        select j).Take(1000).AsEnumerable(); 

        applicantdata = applicantList.AsQueryable().OrderBy(v => v.APPLICANT_ID).ToList(); 


      if (applicantdata.Any()) 
      { 
       Cache.Set("applicants", applicantdata, 30); 
      } 
     } 
     return applicantdata; 

    } 

我希望有人可以推薦我用什麼或做什麼。 預先感謝您。

+1

我會相信'.DefaultIfEmpty()'轉化爲'左JOIN',你異形它? –

回答

7

更新錯誤:您將需要創建一個具有所需屬性的新類並將其返回。

var applicantList = (from app in context.APPLICANTs 
         join a in context.Profiles 
         on app.Profile_id equals a.PROFILE_ID into output 
         from j in output.DefaultIfEmpty() 
         select new { APPLICANT_ID = app.APPLICANT_ID, Applicant_Name = (j == null ? app.Applicant_Name : j.Applicant_Name) }).Take(1000).AsEnumerable(); 
+1

先生。 。現在即時遇到異常 錯誤無法將類型'System.Collections.Generic.List '隱式轉換爲'System.Collections.Generic.IEnumerable '。一個顯式轉換存在(是否缺少強制轉換?) ' 在 'applicantdata = applicantList.AsQueryable()排序依據(V => v.APPLICANT_ID).ToList()。 ' –

+1

select new APPLICANT()會做。我會更新答案。 – cheedep

+1

Sir @cheedep謝謝你,但是現在在'applicantdata = applicantList.AsQueryable()。「中有一個新的異常OrderBy(v => v.APPLICANT_ID).ToList(); '新的異常是'NotSupported異常未被用戶代碼處理實體或複雜類型'Model.APPLICANT'不能在LINQ to Entities查詢中構造' –