c# - with - usar linq en datatable




¿Cómo obtengo una lista ordenada de nombres de una DataTable usando LINQ? (5)

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

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

var sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);




.net-3.5