0

クラスの異なる2つのコレクションがあります。MyClass1-名前、年齢などMyClass2-ニック、年齢など

このコレクション以外を見つけたいです。何かのようなもの

list1.Exept(list2, (l1,l2) => l1.Name==l2.Nick);

しかし、私はこのコードを書くことができず、IEqualityComparerインターフェイスを使用して独自の比較クラスを実装する必要があります。この小さなタスクでは非常にオーバーヘッドが発生します。エレガントな解決策はありますか?

4

2 に答える 2

2

Except実際には、2つの異なるシーケンスタイプでは機能しません。代わりに、次のようなものを使用することをお勧めします。

var excludedNicks = new HashSet<string>(list2.Select(x => x.Nick));
var query = list1.Where(x => !excludedNicks.Contains(x.Name));

(これはの「明確な」側面を実行しないExceptことに注意してください。それが必要な場合は、そのように言ってください。必要なものを見つけ出すことができます。)

于 2011-02-24T12:01:37.450 に答える
1

さて、すべてのニックネームのセットを作成し、それに対して実行します。

var nicknames = new HashSet<string>(list2.Select(l2 => l2.Nick));
var newNames = from l1 in list1
               where !nicknames.Contains(l1.Name)
               select l1;
于 2011-02-24T12:01:38.093 に答える