Cum pot obține o listă distinctă, ordonată de nume dintr-un DataTable folosind LINQ?

voturi
83

Am o DataTablecu o Namecoloană. Vreau să genereze o colecție de nume unice ordonate alfabetic. Următoarea interogare ignoră ordinea de clauza.

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

De ce orderbynu se EXECUTATĂ?

Întrebat 01/08/2008 la 14:14
sursa de către utilizator
În alte limbi...                            


7 răspunsuri

voturi
51

Problema este că operatorul Distinct nu acordă că va menține ordinea inițială a valorilor.

Deci, interogarea va trebui să lucreze ca acest lucru

var names = (from DataRow dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy( name => name );
Publicat 01/08/2008 la 14:18
sursa de către utilizator

voturi
30

Pentru a face mai ușor de citit și de întreținut, puteți, de asemenea, divizat în mai multe declarații LINQ.

  1. Mai întâi, selectați datele într - o nouă listă, să spunem x1, facem o proiecție în cazul în care se dorește
  2. Apoi, creați o listă distinctă, de x1la x2, folosind orice distincție care aveți nevoie
  3. În cele din urmă, creați o listă ordonată, de x2la x3, sortare prin orice doriti
Publicat 04/09/2008 la 03:57
sursa de către utilizator

voturi
8
var sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);
Publicat 05/12/2008 la 02:08
sursa de către utilizator

voturi
5

Încercați următoarele:

dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);
Publicat 28/04/2013 la 10:27
sursa de către utilizator

voturi
1

Încercați următoarele

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

acest lucru ar trebui să lucreze pentru ceea ce aveți nevoie.

Publicat 07/08/2008 la 03:35
sursa de către utilizator

voturi
0

Puteți folosi ceva de genul asta:

dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);
Publicat 25/06/2018 la 10:56
sursa de către utilizator

voturi
0

Pentru abstract: toate răspunsurile au ceva în comun.

Orderby trebuie să fie operația finală.

Publicat 30/01/2018 la 16:19
sursa de către utilizator

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