如何根据条件加入两个不同的表?
我的查询如下:
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 :(得分:2)
您无法根据单行的值有条件地加入。加入的想法是你基于所有行加入。根据查询之外的某些值有条件地确定连接的内容/方式是有意义的。
可以做的是无条件地进行两次连接,但是选择每行有条件地使用哪个结果。显然,只有当表格属于同一类型,或者您首先将s1
和s2
投影到一个公共类型(使用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
语句。