查询:
SELECT * FROM TableA as a
LEFT OUTER JOIN TableB as b
on a.ID = b.ID and a.StatusOne = 1 AND b.StatusOne = 1 AND (a.StatusTwo != 1 OR b.StatusTwo!= 1)
LEFT OUTER JOIN TableC as c
on a.ID = c.ID AND a.StatusOne = 1 AND c.StatusOne = 1 AND (a.StatusTwo != 1 OR c.StatusTwo != 1)
WHERE
a.ID = 99999 AND (b.ID is not null OR c.ID is not null)
我甚至不确定从哪里开始。如果有人能帮助我,我会非常感激。
答案 0 :(得分:1)
我告诉你背后的想法,我没有测试代码,但是要根据不同的字段连接两个表,你的连接应该有一个匿名类型来比较。
var one = 1
from a in tableA
join b in tableB on new { a.ID, b.StatusOne } equals new { b.ID, one} into ab
但是在你的情况下你有多个条件,所以在调用DefaultIsEmpty之前,你应该检查最新的条件
from a in tableA
join b in tableB on new { a.ID, b.StatusOne } equals new { b.ID, one} into ab
from ab in ab.Where(x => x.a.StatusTwo != 1 || x.b.StatusTwo != one).DefaultIfEmpty()
然后另一个外连接遵循相同的模式,您需要进行最终连接。一个好的开始方法是下载LinqPad并查看它为您的查询生成的lambda表达式,您可以从那里获取它。您可以稍后对其进行优化,但您将了解这一代背后的想法。希望这有帮助