Come posso ottenere un elenco di nomi distinto e ordinato da un DataTable utilizzando LINQ?
Domanda
Ho un DataTable
con un Name
colonna.Voglio generare una raccolta di nomi univoci ordinati in ordine alfabetico.La seguente query ignora il file ordinato da clausola.
var names =
(from DataRow dr in dataTable.Rows
orderby (string)dr["Name"]
select (string)dr["Name"]).Distinct();
Perché il orderby
non essere applicato?
Soluzione
Per renderlo più leggibile e gestibile, puoi anche suddividerlo in più istruzioni LINQ.
- Innanzitutto, seleziona i tuoi dati in un nuovo elenco, chiamiamolo
x1
, esegui una proiezione se lo desideri - Successivamente, crea un elenco distinto, da
x1
inx2
, utilizzando qualunque distinzione tu richieda - Infine, crea un elenco ordinato, da
x2
inx3
, ordinando in base a ciò che desideri
Altri suggerimenti
Il problema è che l'operatore distinto non concede che manterrà l'ordine originale dei valori.
Quindi la tua query dovrà funzionare in questo modo
var names = (from DataRow dr in dataTable.Rows
select (string)dr["Name"]).Distinct().OrderBy( name => name );
var sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);
Prova quanto segue:
dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);
Prova quanto segue
var names = (from dr in dataTable.Rows
select (string)dr["Name"]).Distinct().OrderBy(name => name);
questo dovrebbe funzionare per quello che ti serve.
Per astrarre:tutte le risposte hanno qualcosa in comune.
OrderBy deve essere l'operazione finale.
Puoi usare qualcosa del genere:
dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow