我对LINQ还比较陌生,但是我可能已经把自己限制住了。我有两个列表(左边和右边),需要做到以下几点:
a) 基于某些字段获取匹配项
b) 获取左侧没有匹配项的项目
c) 获取右侧没有匹配项的项目
如果某些字段相等,则视为匹配。其他字段可能包含值,但不能影响匹配比较。
为了获得项目a,我在两个列表上执行了JOIN操作:
a) 基于某些字段获取匹配项
b) 获取左侧没有匹配项的项目
c) 获取右侧没有匹配项的项目
如果某些字段相等,则视为匹配。其他字段可能包含值,但不能影响匹配比较。
为了获得项目a,我在两个列表上执行了JOIN操作:
var q = from a in r1
from b in r2
where a.Prop1 == b.Prop1 && a.Prop3 == b.Prop3
select new { a.Prop1, a.Prop2, b.Prop3 };
我不确定接下来该怎么做。我认为不能使用.Except()
,因为两个列表的其他属性可能不同,这可能会导致比较失败。
我还尝试使用Left Join
来获取没有匹配项的项目:
var q =
from c in r1
join p in r2 on c.Prop1 equals p.Prop1
into cp
from p in cp.DefaultIfEmpty()
select new { Prop1 = c.Prop1, Prop2 = p == null ? "N/A" : p.Prop2 };
然而我发现你不能比较多于一个字段。
在LINQ中,可以在左连接中有多个字段吗? 除了LINQ之外,还有其他方法可以获取两个列表之间的差异吗?