Comment puis-je obtenir une liste de noms distincte et ordonnée à partir d’un DataTable 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 (ssortingng)dr["Name"] select (ssortingng)dr["Name"]).Distinct(); 

Pourquoi l’ orderby n’est- orderby pas appliqué?

Pour le rendre plus lisible et maintenable, 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 à x2 , en utilisant la distinction requirejse
  3. Enfin, créez une liste ordonnée, de x2 à x3 , en sortingant selon vos désirs

Le problème est que l’opérateur Distinct n’accorde pas le maintien de l’ordre d’origine des valeurs.

Donc, votre requête devra fonctionner comme ceci

 var names = (from DataRow dr in dataTable.Rows select (ssortingng)dr["Name"]).Distinct().OrderBy( name => name ); 
 var sortedTable = (from results in resultTable.AsEnumerable() select (ssortingng)results[atsortingbuteList]).Distinct().OrderBy(name => name); 

Essayez ce qui suit:

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

Essayez ce qui suit

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

cela devrait fonctionner pour ce dont vous avez besoin.

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

OrderBy doit être l’opération finale.

Vous pouvez utiliser quelque chose comme ça:

 dataTable.Rows.Cast().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);