Comment obtenir un tableau de valeurs de propriétés distinctes à partir de listes en mémoire ?
-
09-06-2019 - |
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?
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();