2009-07-02 167 views
2

我有2個集合,其中一個可用功能和一個用戶功能。我想刪除包含其他集合中的特徵代碼的可用特徵中的項目,但找不到正確的語法。比較兩個對象集合

我包括我當前的代碼不編譯(它的抱怨,我不能使用「==」操作符,我的LINQ知識最少)

是LINQ到做到這一點的最好辦法?任何幫助,將不勝感激。

 AvailableFeatureViewListClass availableFeatures = (AvailableFeatureViewListClass)uxAvailableList.ItemsSource; 
     UserFeatureListClass userFeatures = (UserFeatureListClass)uxUserFeatureList.ItemsSource; 

     foreach (UserFeatureClass feature in userFeatures) 
     { 
      availableFeatures.Remove(availableFeatures.First(FeatureCode => FeatureCode == feature.FeatureCode)); 
     } 

回答

5

使用Except方法與自定義EqualsIEqualityComparer實現你的類型(你的收藏項的類型不是很明顯):

var features = availableFeatures.Except(userFeatures, new FeatureCodeComparer()); 

如果availableFeatures僅僅是一個整數集,你只是這樣做:

var features = availableFeatures.Except(userFeatures.Select(x => x.FeatureCode)); 
+0

我試過第二個建議,它抱怨說「x」部分不能被推斷。聽起來像它應該工作,但Linq現在扔我。 – 2009-07-02 19:27:56

+0

@Mark:你能告訴我們'AvailableFeatureViewListClass`或'UserFeatureListClass`類型是什麼嗎?你爲什麼不直接使用泛型? – 2009-07-02 19:38:29

2

嘗試類似這樣:

var features = (from af in availableFeatures select af.FeatureCode) 
      .Intersect(from uf in userFeatures select uf.FeatureCode); 
1

這個怎麼樣?

IEnumerable<int> a = new List<int>() { 1, 2 }; 
    IEnumerable<int> b = new List<int> { 2, 3 }; 

    var result = a.Except(b); 
    a = result;