我有兩個列表Person
和Product
與共同的,唯一的ID。我想獲得Product
中的條目,其ID與Person
中的ID不匹配。什麼應該是LINQ查詢?LINQ找到基於列的集合差異
List<Person>
:
ID Name
1 Abc
3 Xyz
List<Product>
:
ID Price
3 400
5 150
預期的結果 - Product
類型的列表:
ID Price
5 150
我有兩個列表Person
和Product
與共同的,唯一的ID。我想獲得Product
中的條目,其ID與Person
中的ID不匹配。什麼應該是LINQ查詢?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;
是有' sql'就像做同樣的語法? – Nishanth