我需要一个有效的 LINQ 查询(如果可能,在方法语法中)从集合 A 中获取在第二个集合 B(1 到 n)中没有对应键的所有项目,或者如果 B 中存在元素,则只获取具有 MyValue 的元素无效的。简而言之:返回 A 中不存在于 B 中的所有元素,或者如果它们存在于 B 中,其中至少有一行具有 MyValue = null。
table A
{
int MyKey (primary_key);
}
table B
{
int MyKey (foreign_key to A.MyKey);
string MyValue;
}
我正在尝试例外(),但这仅在两个集合属于同一类型时才有效。我正在尝试 GroupJoin(),但我没有找到加入后如何删除重复项的方法。
a.GroupJoin(
b.Where(item => item.Value = null),
el => el.MyKey,
el2 => el2.MyKey,
(el3, el4) => el3);
有了这个,我过滤掉 B 中的项目,这些项目在再次加入后因为它们不再存在。
在纯 sql 中很容易实现:
select * from A a left join B b on a.MyKey = b.MyKey where MyValue is null;