ホームページ >バックエンド開発 >C++ >複雑なオブジェクトの特定のプロパティでLINQの個別()メソッドを使用する方法は?

複雑なオブジェクトの特定のプロパティでLINQの個別()メソッドを使用する方法は?

Barbara Streisand
Barbara Streisandオリジナル
2025-02-02 09:06:10446ブラウズ

How to Use LINQ's Distinct() Method on Specific Properties of Complex Objects?

linq

を使用した特定のプロパティに基づいて一意のレコードを抽出します

linqのDistinct()メソッドは、複製要素をコレクションから効率的に削除します。 ただし、複雑なオブジェクト(A List<T>など)を扱う場合、特定のプロパティに基づいて一意性のみを必要とする場合、オブジェクト全体に直接Distinct()を使用すると、目的の結果が得られない場合があります。 この記事では、GroupBySelect

プロパティベースの一意性のためにグループビーをレバレッジします

特定のプロパティに基づいて異なるレコードを取得するための鍵は、LINQの

メソッドを利用することです。 これにより、同じプロパティ(またはプロパティの組み合わせ)を共有する要素をグループ化し、各グループから代表者を選択できます。 GroupBy

で説明しましょう。各

オブジェクトには、List<Person>PersonIdなどのプロパティがあります。 Name は、

プロパティのみに基づいて個別の
<code>Person1: Id=1, Name="Test1"
Person2: Id=1, Name="Test1"
Person3: Id=2, Name="Test2"</code>
オブジェクトを取得するには、次のlinqクエリを使用します。

Personここで、Id

オブジェクトを
<code class="language-csharp">List<Person> distinctPeople = allPeople
  .GroupBy(p => p.Id)
  .Select(g => g.First())
  .ToList();</code>
値でグループ化します。

次に、各グループの最初の要素を選択し、ユニークなGroupBy(p => p.Id)PersonId複数のプロパティに拡張Select(g => g.First()) Person Idこの手法は、複数のプロパティに簡単に拡張されます。

の両方でグループ化する このグループ

の組み合わせに基づいて、両方のプロパティにわたって一意性を確保します。 繰り返しになりますが、Id各グループから1人の代表者を選択します FavoriteColor

重要な考慮事項
<code class="language-csharp">List<Person> distinctPeople = allPeople
  .GroupBy(p => new { p.Id, p.FavoriteColor })
  .Select(g => g.First())
  .ToList();</code>

Personこのアプローチは、クエリプロバイダーが潜在的に空のグループを処理できることを前提としています。 これが保証されていない場合は、そのようなケースを優雅に処理するためにIdの代わりにFavoriteColorを使用することを検討してください。 Select(g => g.First())エンティティフレームワークコアの古いバージョン(バージョン6より前)の場合、代替方法が必要になる場合があります。 ガイダンスについては、このスタックオーバーフロー回答を参照してください:

https://www.php.cn/link/7dd21654ce1c39ec7632d219e8e71f11

以上が複雑なオブジェクトの特定のプロパティでLINQの個別()メソッドを使用する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。