2011-06-17 6 views
1

私は2つの異なるリストがあります:OriginalCollectionはをnewCollectionがないことが含まれSQLクエリ - 違いに基づいて2つのコレクションを生成しますか?

public class Foo 
{ 
    public Int32 Id { get; set; } 
} 

ICollection<Foo> OriginalCollection 
ICollection<Foo> NewCollection 

私はそれらをforeachのことができるように2つのリストを生成したい...

  • すべての項目を(基本的に、コレクション削除されたものの)。
  • OriginalCollectionにそのNewCollectionが含まれていないすべてのアイテム(基本的に、追加されたもののコレクション)です。

私はIEnumerableをLINQに戻すことを知っています。私はforeachする必要があるので、それはうまくいきます。オブジェクトではないので、それが失敗した...私はが句を除いてみなかったことを言及するのを忘れてしまった

:私はちょうど何私のクエリは次のようになります...


更新見当がつかない同じ。彼らは同じイドだけを含んでいます。

+0

[101のLINQのサンプル](http://msdn.microsoft.com/en-us/vcsharp/aa336746) – Oded

答えて

1

だから、あなたはセットの補体が必要です。 この投稿は、あなたのニーズに合うように思わ:

Quickest way to find the complement of two collections in C#

それともEnumerable.Except方法:あなたがオーバーロードを使用することができます

:編集後

http://msdn.microsoft.com/en-us/library/system.linq.enumerable.except.aspx

+0

私は私がやったことを言及するのを忘れてしまった私の質問のB/Cを更新します'Except'を試してみてください。しかし、オブジェクトが同じではないので失敗しました。同じIDしか含んでいません。 – michael

+0

私の最初のリンクを確認しましたか?独自のカスタムEualityComparerを指定して、Exceptが必要な方法で動作するようにする方法について説明します。 – mtazva

+0

そう...リンク#1は私の質問と重複している。驚くばかり。 – michael

0
using System.Linq; 

originalC.Except(newC, comparer); 
newC.Except(originalC, comparer); 

それは "IEqualityComparer比較者"をとります。

任意の種類の比較ロジックを使用して、そのインターフェイスを実装する小さなクラスを定義できます。

+0

私の質問が更新されましたb/c「例外」を試したが、オブジェクトが同じではないため、失敗したということを忘れていました。 – michael

0

あなたはオペレータ

http://msdn.microsoft.com/en-us/vcsharp/aa336761.aspx#except1

をnewCollection -except> OriginalCollection =削除

OriginalCollection -except>をnewCollection =あなたは明示的に

+0

私の質問が更新されましたb/c「例外」を試したが、オブジェクトが同じではないために失敗したということを忘れていました。 – michael

0
List<Foo> original = ... 
List<Foo> modified = ... 
... 
var deleted = original.Except(modified); 
var added = modified.Except(original); 

使用することができます追加LINQ除いて探していますしかしそれは本当に価値がありません。一つの方法は次のようになります。

var deleted = from i in original 
       where !modified.Contains(i) 
       select i; 

var added = from i in modified 
      where !original.Contains(i) 
      select i; 
+0

私は自分の質問を更新しましたb/c私は「例外」を試したが、オブジェクトが同じではなく、同じIDしか含んでいないので失敗したということを忘れていました。 – michael

関連する問題