Comment obtenir une liste de noms distincte et ordonnée à partir d'un DataTable en utilisant LINQ?

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

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

Pourquoi le orderby n'est-il pas appliqué?

0
ajouté édité
Vues: 16

5 Réponses

Le problème est que le Distinct  l'opérateur n'accorde pas qu'il sera  maintenir l'ordre d'origine de  valeurs.

Donc, votre requête devra fonctionner comme ça

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

Essayez le suivant

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

Cela devrait fonctionner pour ce dont vous avez besoin.

0
ajouté

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

  1. D'abord, sélectionnez vos données dans une nouvelle liste, appelons-le x1 , faites une projection si vous le souhaitez
  2. Ensuite, créez une liste distincte, depuis x1 vers x2 , en utilisant la distinction dont vous avez besoin
  3. Enfin, créez une liste ordonnée, de x2 vers x3 , en triant par tout ce que vous désirez
0
ajouté

Essayez ce qui suit:

dataTable.Rows.Cast().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);
0
ajouté

Pour résumer: toutes les réponses ont quelque chose en commun.

OrderBy doit être l'opération finale.

0
ajouté