Come ottenere una serie di valori di proprietà distinti dagli elenchi di memoria?
-
09-06-2019 - |
Domanda
Ho un elenco di Foo.
Foo ha una proprietà stringa denominata Bar.
mi piacerebbe usare LINQ per ottenere una stringa[] di distinto valori per Foo.Bar nell'elenco di Foo.
Come posso fare questo?
Soluzione
Io andrei lambda...mooolto più carino
var bars = Foos.Select(f => f.Bar).Distinct().ToArray();
funziona allo stesso modo di quello pubblicato da @lassevk.
Aggiungo anche che potresti voler evitare la conversione in un array fino all'ultimo minuto.
LINQ esegue alcune ottimizzazioni dietro le quinte, le query rimangono nel relativo modulo di query finché non sono esplicitamente necessarie.Quindi potresti voler prima creare tutto ciò di cui hai bisogno nella query in modo che ogni possibile ottimizzazione venga applicata del tutto.
Per valutazione intendo chiedere qualcosa che richieda esplicitamente una valutazione come "Count()" o "ToArray()" ecc.
Altri suggerimenti
Questo dovrebbe funzionare se vuoi usare il modello fluente:
string[] arrayStrings = fooList.Select(a => a.Bar).Distinct().ToArray();
Prova questo:
var distinctFooBars = (from foo in foos
select foo.Bar).Distinct().ToArray();
Non dovresti essere in grado di fare qualcosa del tipo:
var strings = (from a in fooList select a.Bar).Distinct();
string[] array = strings.ToArray();