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

Translate

j'ai unDataTableavec unNamecolonne. Je souhaite générer une collection des noms uniques classés par ordre alphabétique. La requête suivante ignore lecommandé parclause.

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

Pourquoi leorderbypas être appliqué?

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

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-lax1, faites une projection si vous le souhaitez
  2. Ensuite, créez une liste distincte, à partir dex1dansx2, en utilisant la distinction dont vous avez besoin
  3. Enfin, créez une liste ordonnée, à partir dex2dansx3, triant ce que vous désirez
La source
Bob
Translate

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 );
La source
Hobart Lee
Translate
var sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);
La source
Translate

Essayez ce qui suit:

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

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.

La source
Translate

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

OrderBy doit être l'opération finale.

La source
Translate

Vous pouvez utiliser quelque chose comme ça:

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