我有两个列表Person
和Product
具有共同的唯一ID。我希望在Product
中获取其ID与Person
中的ID不匹配的条目。什么应该是LINQ查询?
List<Person>
:
ID Name
1 Abc
3 Xyz
List<Product>
:
ID Price
3 400
5 150
预期结果 - 类型Product
的列表:
ID Price
5 150
答案 0 :(得分:7)
var result = products.Where(p => !persons.Select(x => x.Id)
.Contains(p.Id));
答案 1 :(得分:4)
var persionIDs = new HashSet<int>(persons.Select(person => person.ID));
IEnumerable<Product> invalidProducts =
products.Where(product => !persionIDs.Contains(product.ID));
使用HashSet优化按人员ID查找
答案 2 :(得分:3)
简短的方法
products.Where(product => !persons.Any(p => p.ID == product.ID));
使用内部使用Except
的{{1}}和Join
的更有效方法
Sets