Comment obtenir un tableau de valeurs de propriétés distinctes à partir de listes en mémoire ?

StackOverflow https://stackoverflow.com/questions/40465

Question

J'ai une liste de Foo.

Foo a une propriété de chaîne nommée Bar.

j'aimerais utiliser LINQ pour obtenir une chaîne[] de distinct valeurs pour Foo.Bar dans la liste de Foo.

Comment puis-je faire ceci?

Était-ce utile?

La solution

J'irais lambdas...bien plus sympa

var bars = Foos.Select(f => f.Bar).Distinct().ToArray();

fonctionne de la même manière que ce que @lassevk a publié.

J'ajouterais également que vous souhaiterez peut-être éviter la conversion en tableau jusqu'à la dernière minute.

LINQ effectue quelques optimisations en coulisses, les requêtes restent sous leur forme de requête jusqu'à ce qu'elles soient explicitement nécessaires.Vous souhaiterez peut-être d’abord intégrer tout ce dont vous avez besoin dans la requête afin que toute optimisation possible soit appliquée dans son ensemble.

Par évaluation, j'entends demander quelque chose qui nécessite explicitement une évaluation comme "Count()" ou "ToArray()", etc.

Autres conseils

Cela devrait fonctionner si vous souhaitez utiliser le modèle fluide :

string[] arrayStrings = fooList.Select(a => a.Bar).Distinct().ToArray();

Essaye ça:

var distinctFooBars = (from foo in foos
                       select foo.Bar).Distinct().ToArray();

Ne devriez-vous pas pouvoir faire quelque chose comme :

var strings = (from a in fooList select a.Bar).Distinct();
string[] array = strings.ToArray();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top