2013-11-27 42 views
2

如何根據條件加入兩個不同的表格?LINQ根據條件加入不同的表格

我有我的查詢作爲下:

var myquery = from p in db.tbl1 
       join q in db.tbl2 on p.field1 equals q.field1 
       join r in db.tbl3 on q.field2 equals r.field2 

到這裏一切都很好,現在我想添加1更多的加入到一個表,但它應該是基於類似的情況:

if(q.field3 == 1) 
    join s in db.tbl4 on q.field4 equals s.field4 
else if(q.field3 == 2) 
    join s in db.tbl5 on .... 

所以基本上我想根據q.field3的值加入到不同的表格中。

+0

你能否提供實際的數據和實際的「完整」查詢?試圖改變形狀基於數據*在*查詢聽起來非常..可疑。 (雖然它也可能像執行聚合連接和篩選/選擇所需的列一樣簡單。) – user2864740

+0

兩個表中的's'是否是同一類型?你打算如何讓查詢的其餘部分看起來不是? –

回答

2

您不能根據單行的值條件連接。加入的想法是,你加入的行數爲,全部爲。根據查詢之外的某個值來有條件地確定連接的方式/方式是有意義的。

可以做的是無條件做兩個連接,但選擇哪個結果有條件地使用每一行。顯然,這不僅會如果表是同一類型的工作,或者如果你的第一個項目s1s2成普通型(使用let

var myquery = from p in db.tbl1 
    join q in db.tbl2 on p.field1 equals q.field1 
    join r in db.tbl3 on q.field2 equals r.field2 
    join s1 in db.tbl4 on q.field4 equals s1.field4 
    join s2 in db.tbl5 on q.field5 equals s2.field5 
    let s = q.field3 == 1 ? s1 : 
      q.field3 == 2 ? s2 : null 

應該能夠通過查詢提供翻譯變成CASE聲明。