我正在尝试映射一个必须过滤正确表的自连接,例如这样的 SQL:
select t2.* from table t
left join table t2
on t2.parentID = t.ID and t2.active=1;
如果我想过滤左表,我可以弄清楚语法:
// works
var query = from t in table
where t.active= 1
join t2 in table
on t.parentID equals t2.ID into joined
from r in joined.DefaultIfEmpty() ...
但我不知道如何过滤正确的表格。好像应该是这样的……
// does not work
var query = from t in table
join t2 in table
where t.field = 1
on t.parentID equals t2.ID into joined
from r in joined.DefaultIfEmpty() ...
(无效......join
不能在哪里)。有关于使用多个 from 子句的讨论,但是如果我创建多个 from 子句,所以我可以将 a 添加where
到第二个,我无法弄清楚如何将它们的结果加入到一个新的临时表中。
我不能只在加入后添加“位置”;必须首先过滤右表,否则将发生匹配,where
最后的子句将从左表中删除我在输出中确实想要的行。也就是说,输出应该包含从过滤的右表中没有匹配的行。所以我需要在加入之前过滤正确的表。