一意のオブジェクトプロパティにlinqの個別()を使用して
linqのDistinct()
メソッドは、シーケンスから重複したアイテムを効率的に削除します。 ただし、多くの場合、オブジェクト全体ではなく、特定のオブジェクトプロパティに基づいて一意性を特定する必要があります。
例:id に基づく一意の人
プロパティを備えたクラスがあるとしましょう。 IDに基づいてユニークな人のリストを取得するには、リストをPerson
でグループ化し、各グループの最初の人を選択します。
Id
Id
<code class="language-csharp">List<Person> distinctPeople = allPeople .GroupBy(p => p.Id) .Select(g => g.First()) .ToList();</code>
複数のプロパティ(例えば、および
)にわたって一意性を確保するには、グループ化キーとして匿名タイプを作成します。
Id
FavoriteColor
重要な注意:クエリプロバイダーの互換性
<code class="language-csharp">List<Person> distinctPeople = allPeople .GroupBy(p => new { p.Id, p.FavoriteColor }) .Select(g => g.First()) .ToList();</code>
グループが空の場合、一部のクエリプロバイダー(エンティティフレームワークコアの古いバージョンなど)は例外をスローする場合があります。 そのような場合、をに置き換えます。
を返す場合、コードでその可能性を処理する必要があります。First()
EF Core(Pre-version 6)solution FirstOrDefault()
FirstOrDefault()
null
6以前のEFコアバージョンの場合、潜在的な空のグループを処理するために、より堅牢なアプローチが必要です。 詳細なソリューションについては、このスタックオーバーフロー回答を参照してください:
以上が特定のオブジェクトプロパティでLINQの個別()メソッドを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。