我有 2 个不同类别的集合。MyClass1 - 姓名、年龄等 MyClass2 - 尼克、年龄等
我想找到这个集合之外的东西。就像是
list1.Exept(list2, (l1,l2) => l1.Name==l2.Nick);
但是我不能编写这段代码,需要用 IEqualityComparer 接口实现我自己的比较器类,而且对于这个小任务来说,它看起来非常开销。有什么优雅的解决方案吗?
我有 2 个不同类别的集合。MyClass1 - 姓名、年龄等 MyClass2 - 尼克、年龄等
我想找到这个集合之外的东西。就像是
list1.Exept(list2, (l1,l2) => l1.Name==l2.Nick);
但是我不能编写这段代码,需要用 IEqualityComparer 接口实现我自己的比较器类,而且对于这个小任务来说,它看起来非常开销。有什么优雅的解决方案吗?
Except
真的不适用于两种不同的序列类型。我建议您使用类似的东西:
var excludedNicks = new HashSet<string>(list2.Select(x => x.Nick));
var query = list1.Where(x => !excludedNicks.Contains(x.Name));
(请注意,这不会执行 的“独特”方面Except
。如果您需要,请说出来,我们可以解决您的需求。)
好吧,建立一组所有的昵称,然后运行它。
var nicknames = new HashSet<string>(list2.Select(l2 => l2.Nick));
var newNames = from l1 in list1
where !nicknames.Contains(l1.Name)
select l1;