我有两个列表Person
和一个Product
共同的、唯一的 ID。我想获取Product
其 ID 与Person
. 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));
HashSet 的使用优化了人员 ID 的查找
简短的方法
products.Where(product => !persons.Any(p => p.ID == product.ID));
更有效的方法使用Except
和内部Join
使用Sets
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;