with usar recorrer query example c# linq .net-3.5

c# - usar - ¿Cómo obtengo una lista ordenada de nombres de una DataTable usando LINQ?



recorrer datatable c# linq (7)

Tengo una DataTable con una columna Name . Quiero generar una colección de nombres únicos ordenados alfabéticamente. La siguiente consulta ignora el orden por cláusula.

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

¿Por qué no se hace cumplir el orderby ?


Intenta lo siguiente

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

Esto debería funcionar para lo que necesita.


Para hacerlo más legible y fácil de mantener, también puede dividirlo en varias instrucciones LINQ.

  1. Primero, seleccione sus datos en una nueva lista, llamémosla x1 , haga una proyección si lo desea
  2. Luego, cree una lista distinta, de x1 a x2 , utilizando la distinción que necesite
  3. Finalmente, cree una lista ordenada, de x2 a x3 , ordenando por lo que desee

Para resumir: todas las respuestas tienen algo en común.

OrderBy necesita ser la operación final.


Pruebe lo siguiente:

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


Puedes usar algo así:

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


El problema es que el operador Distinct no garantiza que mantendrá el orden original de valores.

Entonces su consulta tendrá que funcionar así

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