Linq Bestimmt basierend auf der Eigenschaft des Objekts

8

Ist es möglich, die verschiedenen Elemente eines List basierend auf einer Eigenschaft der Objekte in List ?

zu erhalten?

Etwas wie: Distinct(x => x.id)

Was mir nicht weiterhilft, ist folgendes: .Select(x => x.id).Distinct() weil ich dann ein List<int> anstatt List<MyClass>

bekommen würde     
Lieven Cardoen 17.01.2010, 20:48
quelle

4 Antworten

2

Sie brauchen DistinctBy. Es ist nicht Teil der Standard-.NET-Bibliotheken, aber Jon Skeet hat eine Implementierung für Linq zu Objekten hier . Es ist auch in morelinq enthalten.

    
Mark Byers 17.01.2010, 20:51
quelle
6

Das klingt für mich wie ein Gruppierungskonstrukt, weil Sie entscheiden müssen, welches von dem angeblich identischen Objekt Sie eigentlich zurückgeben möchten

%Vor%

Nur weil ID über mehrere Elemente hinweg identisch ist, bedeutet das nicht, dass die Elemente in anderen Eigenschaften identisch sind. Sie müssen also explizit entscheiden, welches Element zurückgegeben wird.

    
Mark Seemann 17.01.2010 20:53
quelle
5

Sie können Ihre eigene IEqualityComparer<T> implementieren und diese an Distinct übergeben:

%Vor%

Dann:

%Vor%     
jason 17.01.2010 20:54
quelle
2

Es gibt eine Überladung für Enumerable.Distinct() , die IEqualityComparer benötigt.

Hier ist ein Beispiel, wo ich Integer nach Parität gefiltert habe:

%Vor%

Es ist ungeschickt; DistinctBy wäre sauberer.

    
Jay Bazuzi 17.01.2010 20:54
quelle

Tags und Links