2013-05-16 19 views
0

我有兩個列表PersonProduct與共同的,唯一的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 

回答

7
var result = products.Where(p => !persons.Select(x => x.Id) 
             .Contains(p.Id)); 
+0

是有' sql'就像做同樣的語法? – Nishanth

4
var persionIDs = new HashSet<int>(persons.Select(person => person.ID)); 
IEnumerable<Product> invalidProducts = 
       products.Where(product => !persionIDs.Contains(product.ID)); 

使用一個HashSet的優化由人物ID

3

短方法

products.Where(product => !persons.Any(p => p.ID == product.ID)); 
使用 ExceptJoin,其使用 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;