Comment puis-je obtenir une liste distincte et ordonnée de noms à partir d'un DataTable à l'aide de LINQ ?

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

  •  08-06-2019
  •  | 
  •  

Question

j'ai un DataTable avec un Name colonne.Je souhaite générer une collection de noms uniques classés par ordre alphabétique.La requête suivante ignore le commandé par clause.

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

Pourquoi le orderby ne soit pas appliqué ?

Était-ce utile?

La solution

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 dans x2, en utilisant la distinction dont vous avez besoin
  3. Enfin, créez une liste ordonnée, à partir de x2 dans x3, en triant selon ce que vous désirez

Autres conseils

Le problème est que l'opérateur distinct n'accorde pas qu'il conservera l'ordre d'origine des valeurs.

Votre requête devra donc fonctionner comme ceci

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);

Essayez ce qui suit :

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

Essayez ce qui suit

var names = (from dr in dataTable.Rows
             select (string)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<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top