我对 LINQ 还很陌生,我可能已经把自己画到了这里的一个角落。我有两个列表(左和右),我需要:
a ) 根据特定字段获取匹配项
b ) 获取左侧的项目,右侧没有匹配项
c ) 获取右侧的项目,左侧没有匹配项
如果某些字段相等,则找到匹配项。其他字段可能包含也可能不包含值,但不得影响匹配比较。
为了获得项目a我JOIN
在两个列表上都执行了 a :
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 };
但是我发现您不能比较多个要比较的字段。
Left Join
LINQ上可以有多个字段吗?还有其他方法(除了 LINQ)来获得两个列表之间的差异吗?