0

我有两个列表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
4

3 回答 3

7
var result = products.Where(p => !persons.Select(x => x.Id)
                                         .Contains(p.Id));
于 2013-05-16T07:59:10.027 回答
4
var persionIDs = new HashSet<int>(persons.Select(person => person.ID));
IEnumerable<Product> invalidProducts = 
                 products.Where(product => !persionIDs.Contains(product.ID));

HashSet 的使用优化了人员 ID 的查找

于 2013-05-16T07:59:41.883 回答
3

简短的方法

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;
于 2013-05-16T07:59:51.620 回答