2009-07-02 18 views
2

2つのコレクション、利用可能な機能の1つとユーザー機能の1つがあります。他のコレクションのフィーチャーコードが含まれているが、正しい構文が見つからない、使用可能なフィーチャー内のアイテムを削除したいとします。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あなたのタイプのカスタムEqualsまたはIEqualityComparer実装と方法(あなたのコレクションアイテムの種類が本当に明らかにされていません):

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

availableFeaturesは、整数のちょうどコレクションである場合には、このような何かを試してみてください

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

私は2番目の提案を試みましたが、 "x"部分が推論できないと訴えています。それは動作するはずだが、Linqが今私を投げているように思える。 –

+0

@マーク: 'AvailableFeatureViewListClass'や' UserFeatureListClass'の型は何ですか?ジェネリック型を直接使用しているのはなぜですか? –

+0

ありがとうMehrdad、それらは実際には両方のBusinessObjectsですが、オブジェクトコレクション内の項目はプロパティ(この場合はFeatureCode)を共有します –

2

:あなただけのような何かをしたい

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

ありがとうアンドリュー、それは正しく見えますが、何も返しません。私はチェックし、IntersectIntegratorオブジェクトにキャスト変数がキャストされている場合、それをAvailableFeatureViewListクラスに変換する方法はありますか? –

1

これはいかがですか?

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

    var result = a.Except(b); 
    a = result; 
関連する問題