ClassX
この質問のために呼び出されたクラスがあり、次のように宣言されています。
class X
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
これらのクラスの2 つのインスタンス (instanceOne
およびinstanceTwo
) がList<T>
ある場合、両方のインスタンスで同じ要素を見つける方法は次のとおりです。
instanceOne に 2 つの要素があり、instanceTwo に 4 つの要素があるとします。各インスタンスで 2 つの要素が同じである (同じ Guid ID を持つという事実によって定義されている)
私はそれに自分の道をLINQできるはずだと思ったが、これは私のためにそれをやっていない
// What's common to the two instances?
var commonElements = (
from a in instanceTwo
join b in instanceOne on a.Id equals b.Id
select b).ToList();
// What's not in instanceOne and in instanceTwo?
var notInInstanceOne = instanceTwo.Except(commonElements)
この状況instanceTwo
では のスーパーセットですinstanceOne
が、常にそうであるとは限らないため、元の LINQ ステートメントを反転して、 vizinstanceOne
にない要素を取得できるはずです。instanceTwo
var notInInstanceTwo = instanceOne.Except(commonElements)
イライラすることに、元の LINQ ステートメント (共通要素を特定しようとする場所) が機能していません。誰かが私が間違っていることを見つけられますか?
編集 2012-06-08 11:00 UTC
@Nikhil Agrawal および @Trust me によると、私は医師です。Intersect メソッドを使用しましたが、期待どおりの結果が得られません。
var commonItems = instanceTwo.Intersect(instanceOne); // Returns nothing
var itemsInTwoNotOne= instanceTwo.Except(instanceOne); // Returns everything in instanceTwo
FWIW Equals() メソッドの私の実装は次のとおりです。
public bool Equals(Guid x, Guid y)
{
if (x == y)
{
return true;
}
return false;
}