LINQ根据列查找集合差异

时间:2013-05-16 07:57:08

标签: c# linq

我有两个列表PersonProduct具有共同的唯一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

3 个答案:

答案 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