2014-07-26 168 views
-2

enter image description here使用linq比較兩個列表

我有兩個列表如圖所示。我想輸出的是需要從清單2中刪除狀態,清單1中不存在,如下所示。由於

enter image description here

+0

Whert花哨的圖紙,但StackOverflow上不適用於「給我寫代碼,做這做那。」 –

+0

@Konrad Kokosa:對不起,我是linq的初學者,所以我沒有任何想法。 thatsy尋求幫助 – user2931394

回答

1

這是典型的內部連接,因此你可以使用LINQ Join方法:

var list3 = list2.Join(list1, x => x.State, y => y.State, (x, y) => x) 
       .ToList(); 
1
for(int i=0;i<list2.Count;i++) 
{ 
    if(!list1.Select(p=>p.State).Contains(list2[i].State)) 
    { 
     list2.RemoveAt(i); 
    } 
} 

或:

var improve_list2 = (from c in list2 
        where list1.Select(p=>p.State).Contains(c.State) 
        select c).ToArray(); 
2

你可以使用相交方法

var list1 = new [] {1,2,4}; 
var list2 = new [] {1,2,3}; 
list1.Intersect(list2); 

這會給結果1,2

或者,如果你ar如果使用你創建的類,你需要創建一個比較器來告訴交叉方法什麼等於什麼。

 var productList1 = new List<Product>(); 
     productList1.Add(new Product { Code = 1, Name = "Pears" }); 
     productList1.Add(new Product { Code = 2, Name = "Rasbries" }); 
     productList1.Add(new Product { Code = 3, Name = "Apple" }); 

     var productList2 = new List<Product>(); 
     productList2.Add(new Product { Code = 1, Name = "Pears" }); 
     productList2.Add(new Product { Code = 2, Name = "Rassbeyreys" }); 
     productList2.Add(new Product { Code = 4, Name = "Avocado" }); 

     var result = productList1.Intersect(productList2, new ProductComparer()); 


public class ProductComparer : IEqualityComparer<Product> 
{ 
    public bool Equals(Product x, Product y) 
    { 
     return x.Code == y.Code; 
    } 

    public int GetHashCode(Product obj) 
    { 
     return obj.Code; 
    } 
} 
+0

如果您認爲這是答案,請選擇它:-) – orangesherbert