LINQ 以基于列查找集合差异
本文关键字:集合 查找 于列 LINQ | 更新日期: 2023-09-27 18:13:56
我有两个列表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
var result = products.Where(p => !persons.Select(x => x.Id)
.Contains(p.Id));
var persionIDs = new HashSet<int>(persons.Select(person => person.ID));
IEnumerable<Product> invalidProducts =
products.Where(product => !persionIDs.Contains(product.ID));
使用哈希集优化了按人员 ID 查找
简短的方法
products.Where(product => !persons.Any(p => p.ID == product.ID));
使用内部使用Sets
的Except
和Join
更有效的方法
from prod in products
join pID in products.Select(p => p.ID).Except(persons.Select(pers => pers.ID))
on prod.ID equals pID
select prod;