2 votes

Sélection distincte LINQ basée sur la valeur d'une propriété

J'ai une liste générique de pays entièrement remplie d'instances de pays.

List <Country> mylist

Cette liste comporte différentes instances de pays, mais certaines ont la même valeur pour la propriété "nom".

Comment puis-je faire un distinct sur la propriété du pays "nom" pour obtenir seulement les pays avec des noms différents ?

Gracias.

Salue.

José.

5voto

Jon Skeet Points 692016

Vous pourriez utiliser PlusLINQ avec son DistinctBy méthode :

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

(Vous n'êtes pas obligé de prendre tout MoreLINQ bien sûr - vous pouvez simplement copier cette méthode dans votre code avec la méthode ThrowIfNull et préserver le texte de la licence de manière appropriée).

5voto

Jason Points 125291

Jon a suggéré MoreLINQ, ce qui est évidemment très bien, mais vous voulez peut-être éviter une autre dépendance. Dans ce cas, vous pouvez utiliser Enumerable.Distinct avec votre propre IEqualtyComparer<Country> :

var distinctCountries = myList.Distinct(new EqualityComparerForCountryByName());
//IEqualityComparer
class EqualityComparerForCountryByName : IEqualityComparer<Country> {
     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();
     }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X