115 votes

Comment obtenir une liste distincte et ordonnée de noms à partir d'une table de données en utilisant LINQ ?

J'ai un DataTable avec un Name colonne. Je veux générer une collection de noms uniques classés par ordre alphabétique. La requête suivante ignore la colonne commande par clause.

var names =
    (from DataRow dr in dataTable.Rows
    orderby (string)dr["Name"]
    select (string)dr["Name"]).Distinct();

Pourquoi le orderby ne sont pas appliquées ?

57voto

Bob Points 34449

Le problème est que l'opérateur Distinct ne garantit pas qu'il qu'il maintiendra l'ordre original des valeurs.

Votre requête devra donc fonctionner de la manière suivante

var names = (from DataRow dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy( name => name );

39voto

a7drew Points 4005

Pour le rendre plus lisible et plus facile à maintenir, vous pouvez également le diviser en plusieurs instructions LINQ.

  1. Tout d'abord, sélectionnez vos données dans une nouvelle liste, appelons-la x1 Faites une projection si vous le souhaitez.
  2. Ensuite, créez une liste distincte, de x1 sur x2 en utilisant la distinction que vous souhaitez
  3. Enfin, créez une liste ordonnée, de x2 sur x3 en triant par ce que vous voulez

11voto

var sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);

8voto

Gavin Fang Points 104

Essayez ce qui suit :

dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);

3voto

Nick Berardi Points 31361

Essayez ce qui suit

var names = (from dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy(name => name);

cela devrait correspondre à ce dont vous avez besoin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X