特定のプロパティに対するLINQのDistinct() 質問する

特定のプロパティに対するLINQのDistinct() 質問する

LINQについて学ぼうとしているのですが、使い方がわかりませんDistinct単純なリストがない場合 (単純な整数のリストは非常に簡単に作成できますが、これは問題ではありません)。 の 1 つ以上のプロパティで を使用したい場合はどうすれよいでしょDistinctList<TElement>TElement

例: オブジェクトが でPerson、プロパティがの場合Id、 をすべて取得してPersonオブジェクトのDistinctプロパティを使用して を使用するにはどうすればよいでしょうか。Id

Person1: Id=1, Name="Test1"
Person2: Id=1, Name="Test1"
Person3: Id=2, Name="Test2"

Person1だけを取得するにはどうすればよいですかPerson3? それは可能ですか?

LINQ では不可能な場合、Person一部のプロパティに応じてリストを作成する最適な方法は何でしょうか?

ベストアンサー1

1 つ以上プロパティに基づいて個別のリストを取得したい場合はどうすればよいでしょうか?

簡単です!グループ分けして、その中から勝者を選びます。

List<Person> distinctPeople = allPeople
  .GroupBy(p => p.PersonId)
  .Select(g => g.First())
  .ToList();

複数のプロパティにグループを定義する場合は、次の手順に従います。

List<Person> distinctPeople = allPeople
  .GroupBy(p => new {p.PersonId, p.FavoriteColor} )
  .Select(g => g.First())
  .ToList();

注: 一部のクエリ プロバイダーは、各グループに少なくとも 1 つの要素が必要であること、およびそのような状況で呼び出す適切なメソッドが First であることを解決できません。このようなクエリ プロバイダーを使用する場合は、FirstOrDefault を使用すると、クエリ プロバイダーを介してクエリを取得できる場合があります。

注 2: EF Core (EF Core 6 より前) と互換性のあるアプローチについては、この回答を検討してください。https://stackoverflow.com/a/66529949/8155

おすすめ記事