根据其他列表中的两个参数从一个列表中删除项目

时间:2012-08-31 01:17:09

标签: c# linq linq-to-objects

我有两个客户列表,list1和list2,包含id,name和city属性。我需要从list1中删除项目,如果它们在list2中具有相同的名称和城市。如何为多参数选择编写linq查询。

2 个答案:

答案 0 :(得分:11)

list1.RemoveAll(c => list2.Any(c2 => c2.Name == c.Name && c2.City == c.City));

答案 1 :(得分:2)

与使用&&||写两个布尔值的任何条件相同。一个例子:

from x in list1
where list2.Any(y => y.Name == x.Name && y.City == x.City)
select x

请注意,“谓词”只是Func<MyType, bool>,所以只要你最后返回一个bool,就可以在那里做一些非常时髦的东西。

当然,您必须在删除之前枚举IEnumerable.ToList()它),因为您无法在枚举列表时更改列表,但您可能知道(或者只使用List.RemoveAll上面的谓词)