1. 程式人生 > >EntityFramework經典的left join語法

EntityFramework經典的left join語法

/*
 * 經常看到有人問linq語法如何寫left join的查詢語句,但網上找到的都是簡單的兩表連線,參考意義有限。
 * 今天終於專案裡要用到複雜的多表連線,同時含有多個左連線,
 * 恰好又遇到業務中有複雜連線條件,因此整理如下,供大家參考:
 */
list = from t1 in Content.table1
       join t2 in Content.table2
         on t1.colum1 equals t2.colum2
       into r1
       from t2 in r1.DefaultIfEmpty()
       join t3 in Content.table3
         on new { pid = t2.colum2,      sid = t2.colum1,     t2.colum3 } //欄位型別或值不一致時,
     equals new { pid = t3.colum2 ?? 0, sid = t3.colum3 + 1, t3.colum4 } //可以這樣統一起來
       into r2
       from t3 in r2.DefaultIfEmpty()
       join t4 in Content.table4
         on t2.colum5 equals t4.colum1
      where t2.id == paramId
         && string.IsNullOrEmpty(t1.colum2)
     select new your-result-class-name { //這裡寫點啥,地球人都知道。。。 }