Linq在两个列表中找到差异

Sal*_*alo 17 linq set

我有两个这样的成员列表:

之前:彼得,肯,朱莉娅,汤姆

之后:彼得,罗伯特,朱莉娅,汤姆

正如你所看到的,肯已经出局了,罗伯特也在.

我想要的是检测变化.我想要列出两个列表中已更改的内容.linq怎么能帮助我?

jas*_*son 29

你的问题没有完全明确,但我认为你正在寻找差异作为集合(也就是说,排序无关紧要).如果是这样,您需要两组的对称差异.你可以使用Enumerable.Except以下方法实现:

before.Except(after).Union(after.Except(before));
Run Code Online (Sandbox Code Playgroud)


Nig*_*uch 21

作为linq答案的替代方法,必须两次传递两个列表,使用HashSet.SymmetricExceptWith():

var difference = new HashSet(before);
difference.SymmetricExceptWith(after);
Run Code Online (Sandbox Code Playgroud)

可以更有效率.


Man*_*anu 5

其他方式:

before.Union(after).Except(before.Intersect(after))
Run Code Online (Sandbox Code Playgroud)