Unterschieden nach Eigenschaft der Klasse mit LINQ
Habe ich eine Sammlung:
List<Car> cars = new List<Car>();
Autos sind eindeutig durch die Eigenschaft CarCode
.
Habe ich drei Autos in der Sammlung, und zwei mit identischen CarCodes.
Wie kann ich LINQ verwenden, um zu konvertieren, diese Sammlung von Autos mit einzigartigen CarCodes?
InformationsquelleAutor der Frage user278618 | 2010-03-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die Gruppierung verwenden, und bekommen das erste Auto aus jeder Gruppe:
InformationsquelleAutor der Antwort Guffa
Verwenden MoreLINQdie eine
DistinctBy
Methode 🙂(Dies ist nur für LINQ to Objects, wohlgemerkt.)
InformationsquelleAutor der Antwort Jon Skeet
Gleichen Ansatz wie Guffa sondern als eine Erweiterung-Methode:
Als:
InformationsquelleAutor der Antwort Sheldor the conqueror
Implementieren Sie können einen IEqualityComparer und verwenden Sie, dass in Ihr Deutliche Erweiterung.
Dann
InformationsquelleAutor der Antwort Anthony Pegram
Andere Erweiterung Methode, die für Linq-to-Objekte, ohne mit GroupBy:
InformationsquelleAutor der Antwort Luke Puplett
Ich denke, die beste option in Bezug auf Leistung (oder in jeder Hinsicht) ist, um Unterschiedliche der Die IEqualityComparer - Schnittstelle.
Obwohl die Umsetzung jeder Zeit ein neues Programm für jede Klasse ist umständlich und erzeugt boilerplate-code.
So, hier ist eine extension-Methode erzeugt einen neuen IEqualityComparer on-the-fly für jede Klasse mit der spiegelung.
Verwendung:
Erweiterung Methode Code
InformationsquelleAutor der Antwort Anestis Kivranoglou
Können Sie nicht effektiv nutzen
Distinct
auf eine Sammlung von Objekten (ohne zusätzliche Arbeit). Ich werde erklären, warum.Die Dokumentation sagt:
Für Objekte, das heißt, es nutzt die Standard-Gleichung Methode zum vergleichen von Objekten (Quelle). Das ist auf deren hash-code. Und da Ihre Objekte nicht implementieren die
GetHashCode()
undEquals
Methoden, überprüfen Sie auf der Referenz des Objekts, die nicht unterscheidbar sind.InformationsquelleAutor der Antwort Patrick Hofman
Einem anderen Weg das gleiche erreichen...
Es ist möglich, erstellen Sie ein extension-Methode, dies zu tun in einer allgemeineren Weise. Es wäre interessant, wenn jemand könnte evalute Leistung dieses 'DistinctBy' gegen die GroupBy-Ansatz.
InformationsquelleAutor der Antwort JwJosefy
Können Sie check out my PowerfulExtensions Bibliothek. Momentan ist er in einem sehr Jungen Stadium, aber bereits können Sie Methoden wie Distinct, Union, Intersect, Außer auf eine beliebige Anzahl von Eigenschaften;
Dies ist, wie Sie es verwenden:
InformationsquelleAutor der Antwort gisek