Hvordan får jeg en distinkt, sortert liste over navn fra en Datatable ved hjelp av LINQ?

stemmer
87

Jeg har en DataTablemed en Namekolonne. Jeg vil generere en samling av de unike navn i alfabetisk rekkefølge. Følgende spørring ignorerer rekkefølgen av klausulen.

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

Hvorfor orderbyikke bli håndhevet?

Publisert på 01/08/2008 klokken 13:14
kilden bruker
På andre språk...                            


7 svar

stemmer
52

Problemet er at den distinkte operatøren ikke gi at det vil opprettholde den opprinnelige bestillingen av verdier.

Så søket må jobbe som dette

var names = (from DataRow dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy( name => name );
Svarte 01/08/2008 kl. 13:18
kilden bruker

stemmer
30

For å gjøre det mer lesbart og vedlikeholdsvennlig, kan du også dele den opp i flere LINQ uttalelser.

  1. Først velger du dine data til en ny liste, la oss kalle det x1, gjør en projeksjon om ønskelig
  2. Deretter oppretter du en distinkt liste, fra x1i x2, ved hjelp av hva skillet du trenger
  3. Til slutt, opprette en sortert liste, fra x2inn x3, sortering etter hva du ønsker
Svarte 04/09/2008 kl. 02:57
kilden bruker

stemmer
8
var sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);
Svarte 05/12/2008 kl. 01:08
kilden bruker

stemmer
5

Prøv følgende:

dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);
Svarte 28/04/2013 kl. 09:27
kilden bruker

stemmer
1

Prøv følgende

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

dette skal fungere for det du trenger.

Svarte 07/08/2008 kl. 02:35
kilden bruker

stemmer
0

Du kan bruke noe sånt:

dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);
Svarte 25/06/2018 kl. 10:56
kilden bruker

stemmer
0

Til abstrakt: alle svarene har noe til felles.

Orderby må være den siste operasjonen.

Svarte 30/01/2018 kl. 16:19
kilden bruker

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