Come posso ottenere un elenco di nomi distinto e ordinato da un DataTable utilizzando LINQ?

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

  •  08-06-2019
  •  | 
  •  

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?

È stato utile?

Soluzione

Per renderlo più leggibile e gestibile, puoi anche suddividerlo in più istruzioni LINQ.

  1. Innanzitutto, seleziona i tuoi dati in un nuovo elenco, chiamiamolo x1, esegui una proiezione se lo desideri
  2. Successivamente, crea un elenco distinto, da x1 in x2, utilizzando qualunque distinzione tu richieda
  3. Infine, crea un elenco ordinato, da x2 in x3, 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
scroll top