LINQ没有IEqualityComparer实现

时间:2011-02-24 11:56:37

标签: c# linq iequalitycomparer

我有两个不同类的集合。 MyClass1 - 姓名,年龄等MyClass2 - 尼克,年龄等

除了这个系列,我想找到。像

这样的东西

list1.Exept(list2, (l1,l2) => l1.Name==l2.Nick);

但我不能编写这段代码,需要用IEqualityComparer接口实现我自己的comparer类,而且这个小任务看起来非常开销。有没有优雅的解决方案?

2 个答案:

答案 0 :(得分:2)

Except实际上不适用于两种不同的序列类型。我建议你使用类似的东西:

var excludedNicks = new HashSet<string>(list2.Select(x => x.Nick));
var query = list1.Where(x => !excludedNicks.Contains(x.Name));

(请注意,此不会执行Except的“不同”方面。如果您需要,请说出来,我们可以找出您需要的内容。)

答案 1 :(得分:1)

好吧,建立一套所有的昵称,然后反对。

var nicknames = new HashSet<string>(list2.Select(l2 => l2.Nick));
var newNames = from l1 in list1
               where !nicknames.Contains(l1.Name)
               select l1;