Hoe krijg ik een duidelijke, geordende lijst van namen uit een DataTable met behulp van LINQ?

stemmen
83

Ik heb een DataTablemet een Namekolom. Ik wil een verzameling van de unieke namen op alfabetische volgorde te genereren. De volgende vraag gaat voorbij aan de orde door clausule.

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

Waarom wordt het orderbyniet krijgen gehandhaafd?

De vraag is gesteld op 01/08/2008 om 14:14
bron van user
In andere talen...                            


8 antwoorden

stemmen
51

Het probleem is dat de Distinct exploitant niet toe te kennen dat zij de oorspronkelijke volgorde van de waarden zal handhaven.

Dus uw vraag zal moeten werken als volgt

var names = (from DataRow dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy( name => name );
antwoordde op 01/08/2008 om 14:18
bron van user

stemmen
1

Probeer het volgende

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

Dit zou moeten werken voor wat je nodig hebt.

antwoordde op 07/08/2008 om 03:35
bron van user

stemmen
30

Om het beter leesbaar en beheersbaar te maken, kunt u ook splitsen in meerdere LINQ statements.

  1. Selecteer eerst uw gegevens in een nieuwe lijst, laten we zeggen x1, doe een projectie indien gewenst
  2. Vervolgens maakt u een aparte lijst, van x1in x2, met behulp van welke onderscheiding die u nodig heeft
  3. Tot slot, maak een geordende lijst, van x2in x3, het sorteren op wat u wenst
antwoordde op 04/09/2008 om 03:57
bron van user

stemmen
8
var sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);
antwoordde op 05/12/2008 om 02:08
bron van user

stemmen
5

Probeer het volgende:

dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);
antwoordde op 28/04/2013 om 10:27
bron van user

stemmen
0

Om abstract: alle antwoorden hebben iets gemeen.

OrderBy moet de uiteindelijke operatie.

antwoordde op 30/01/2018 om 16:19
bron van user

stemmen
0

Je kunt iets dergelijks te gebruiken:

dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);
antwoordde op 25/06/2018 om 10:56
bron van user

stemmen
0
dataTable.Rows.Cast<DataRow>().GrpBy(g => g["Name"]).Select(s => s.First()).OrBy(o => o["Name"]);
antwoordde op 30/09/2019 om 11:48
bron van user

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