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