¿Cómo puedo obtener una distinta, lista ordenada de nombres a partir de una tabla de datos utilizando LINQ?
Pregunta
Tengo un DataTable
con un Name
columna.Quiero generar una colección de los únicos nombres ordenados alfabéticamente.La siguiente consulta ignora la orden por la cláusula.
var names =
(from DataRow dr in dataTable.Rows
orderby (string)dr["Name"]
select (string)dr["Name"]).Distinct();
¿Por qué el orderby
no se aplican?
Solución
Para que sea más legible y fácil de mantener, también se puede dividir en varias LINQ declaraciones.
- En primer lugar, seleccione los datos en una lista de nuevo, vamos a llamar
x1
, hacer una proyección, si se desea - A continuación, cree una lista distinct, de
x1
enx2
, usando cualquier distinción que usted requiere - Por último, crear una lista ordenada, de
x2
enx3
, clasificación por lo que usted desea
Otros consejos
El problema es que las Distintas el operador no garantiza que va a mantener el orden original de valores.
Para su consulta se necesita para que funcione como esta
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);
Probar las siguientes:
dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);
Intente lo siguiente
var names = (from dr in dataTable.Rows
select (string)dr["Name"]).Distinct().OrderBy(name => name);
esto debería funcionar para lo que usted necesita.
A lo abstracto:todas las respuestas tienen algo en común.
OrderBy debe ser el final de la operación.
Usted puede usar algo como que:
dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow