1. ホーム
  2. c#

[解決済み] LINQ Select Distinct with Anonymous Types

2022-04-25 11:51:22

質問

私はオブジェクトのコレクションを持っています。 正確な型は重要ではありません。 そこから、特定のプロパティのペアのユニークなペアをすべて抽出したいのですが、以下のようになります。

myObjectCollection.Select(item=>new
                                {
                                     Alpha = item.propOne,
                                     Bravo = item.propTwo
                                }
                 ).Distinct();

この場合、Distinctはデフォルトのオブジェクトequalsを使用するのでしょうか(各オブジェクトは新しいので、私には無意味でしょう)、それとも別のequals(この場合、アルファとブラボーの値が同じ => 等しいインスタンス)を実行するように指示できるのでしょうか。 もし、これでできないのであれば、その結果を達成する方法はないのでしょうか?

解決方法は?

K. Scott Allenの素晴らしい投稿をご覧ください。

そして、すべての人に平等を ... 匿名タイプ

短い答え(と引用)。

C#のコンパイラーは 等号とGetHashCodeを匿名 という型があります。この2つの型の実装は オーバーライドされたメソッドは、すべてのパブリック を計算するために、その型の オブジェクトのハッシュコードと を等しくする。もし、同じ 匿名型がすべて同じ は、そのプロパティの値として オブジェクトは等しい。

ですから、無名型を返すクエリでDistinct()メソッドを使っても全く問題ないわけです。