0

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

我想找到这个集合之外的东西。就像是

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

但是我不能编写这段代码,需要用 IEqualityComparer 接口实现我自己的比较器类,而且对于这个小任务来说,它看起来非常开销。有什么优雅的解决方案吗?

4

2 回答 2

2

Except真的不适用于两种不同的序列类型。我建议您使用类似的东西:

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

(请注意,这不会执行 的“独特”方面Except。如果您需要,请说出来,我们可以解决您的需求。)

于 2011-02-24T12:01:37.450 回答
1

好吧,建立一组所有的昵称,然后运行它。

var nicknames = new HashSet<string>(list2.Select(l2 => l2.Nick));
var newNames = from l1 in list1
               where !nicknames.Contains(l1.Name)
               select l1;
于 2011-02-24T12:01:38.093 回答