Hogyan kap egy különálló, rendezett névsorát egy DataTable segítségével LINQ?

szavazat
83

Van egy DataTableegy Nameoszlopot. Azt akarom, hogy létrehoz egy gyűjtemény egyedi nevek ábécésorrendben. Az alábbi lekérdezés figyelmen kívül hagyja a sorrendben záradékot.

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

Miért orderbynem kap végrehajtani?

A kérdést 01/08/2008 14:14
a forrás felhasználó
Más nyelveken...                            


8 válasz

szavazat
51

A probléma az, hogy a határozott üzemeltető nem biztosítja, hogy továbbra is fenntartja az eredeti értékek sorrendje.

Így Ön keresett kell dolgozni, mint ez

var names = (from DataRow dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy( name => name );
Válaszolt 01/08/2008 14:18
a forrás felhasználó

szavazat
1

Próbálja ki a következő

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

ez a munka, amire szüksége van.

Válaszolt 07/08/2008 03:35
a forrás felhasználó

szavazat
30

Ahhoz, hogy olvashatóbb és karbantartható, akkor is feldarabolja több LINQ nyilatkozatokat.

  1. Először válassza ki az adatokat egy új listát, nevezzük x1, akkor a vetítés kívánt
  2. Ezután hozzon létre egy külön listán, x1a x2segítségével bármilyen különbségtétel van szüksége
  3. Végül egy rendezett listán, x2a x3rendezés lesz bármi, amire vágysz
Válaszolt 04/09/2008 03:57
a forrás felhasználó

szavazat
8
var sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);
Válaszolt 05/12/2008 02:08
a forrás felhasználó

szavazat
5

Próbáld ki a következőt:

dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);
Válaszolt 28/04/2013 10:27
a forrás felhasználó

szavazat
0

Absztrakt: az összes választ van valami közös.

OrderBy kell lennie az utolsó művelet.

Válaszolt 30/01/2018 16:19
a forrás felhasználó

szavazat
0

Használhatja valami ilyesmi:

dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);
Válaszolt 25/06/2018 10:56
a forrás felhasználó

szavazat
0
dataTable.Rows.Cast<DataRow>().GrpBy(g => g["Name"]).Select(s => s.First()).OrBy(o => o["Name"]);
Válaszolt 30/09/2019 11:48
a forrás felhasználó

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