我有两个不同类的集合。 MyClass1 - 姓名,年龄等MyClass2 - 尼克,年龄等
除了这个系列,我想找到。像
这样的东西 list1.Exept(list2, (l1,l2) => l1.Name==l2.Nick);
但我不能编写这段代码,需要用IEqualityComparer接口实现我自己的comparer类,而且这个小任务看起来非常开销。有没有优雅的解决方案?
答案 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;