2 Stimmen

LINQ distincte Auswahl basierend auf einem Eigenschaftswert

Ich habe eine generische Liste von Ländern, die vollständig mit Instanzen von Ländern gefüllt ist.

List  mylist

Diese Liste enthält verschiedene Instanzen von Ländern, aber einige haben den gleichen Wert für die Eigenschaft "name".

Wie könnte ich ein Distinct über die Eigenschaft des Landes "name" machen, um nur die Länder mit unterschiedlichen Namen zu erhalten?

Vielen Dank.

Grüße.

Jose.

5voto

Jon Skeet Punkte 1325502

Sie könnten MoreLINQ mit seiner DistinctBy Methode verwenden:

var distinctCountries = allCountries.DistinctBy(c => c.Name);

(Sie müssen natürlich nicht das gesamte MoreLINQ übernehmen - Sie könnten einfach diese eine Methode in Ihren Code kopieren, zusammen mit der ThrowIfNull Erweiterungsmethode, und den Lizenztext entsprechend erhalten.)

5voto

jason Punkte 227577

Jon schlug MoreLINQ vor, was natürlich in Ordnung ist, aber vielleicht möchten Sie eine weitere Abhängigkeit vermeiden. In diesem Fall können Sie Enumerable.Distinct mit Ihrem eigenen IEqualtyComparer verwenden:

var distinctCountries = myList.Distinct(new EqualityComparerForCountryByName());
//IEqualityComparer
class EqualityComparerForCountryByName : IEqualityComparer {
     public bool Equals(Country x, Country y) {
         if(Object.ReferenceEquals(x, y)) { return true; } 
         if(x == null || y == null) { return false; }
         return x.Name == y.Name;
     }

     public int GetHashCode(Country obj) {
         if(obj == null) { return 0; }
         return obj.Name.GetHashCode();
     }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X