我有两个客户列表,list1和list2,包含id,name和city属性。我需要从list1中删除项目,如果它们在list2中具有相同的名称和城市。如何为多参数选择编写linq查询。
答案 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
上面的谓词)