Jak získám zřetelný, seřazený seznam jmen z DataTable s využitím LINQ?

hlasů
83

Mám DataTables Namekolonou. Chci vytvořit kolekci unikátních jmen abecedně. Následující dotaz ignoruje ORDER BY klauzule.

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

Proč orderbyne dostat do praxe?

Položena 01/08/2008 v 14:14
zdroj uživatelem
V jiných jazycích...                            


7 odpovědí

hlasů
51

Problém je v tom, že Zřetelná provozovatel nezaručuje, že bude udržovat původní pořadí hodnot.

Takže váš dotaz bude muset pracovat takhle

var names = (from DataRow dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy( name => name );
Odpovězeno 01/08/2008 v 14:18
zdroj uživatelem

hlasů
30

Aby bylo lépe čitelné a udržovatelné, můžete také rozdělit do několika prohlášení LINQ.

  1. Nejprve vyberte vaše data do nového seznamu, nazvěme to x1, dělat projekci v případě potřeby
  2. Dále vytvořte odlišný seznam, ze x1do x2, s využitím jakékoliv rozlišování budete potřebovat
  3. A konečně, vytvořit seřazený seznam, ze x2do x3třídění by cokoliv si přejete
Odpovězeno 04/09/2008 v 03:57
zdroj uživatelem

hlasů
8
var sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);
Odpovězeno 05/12/2008 v 02:08
zdroj uživatelem

hlasů
5

Vyzkoušejte následující:

dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);
Odpovězeno 28/04/2013 v 10:27
zdroj uživatelem

hlasů
1

Zkuste následující postup

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

To by mělo fungovat na to, co budete potřebovat.

Odpovězeno 07/08/2008 v 03:35
zdroj uživatelem

hlasů
0

Můžete použít něco takového:

dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);
Odpovězeno 25/06/2018 v 10:56
zdroj uživatelem

hlasů
0

K abstraktu: všechny odpovědi mají něco společného.

OrderBy musí být konečná operace.

Odpovězeno 30/01/2018 v 16:19
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more