Vă mulțumim pentru susținere

Cum obțin o listă distinctă, ordonată de nume dintr-un tabel de date utilizând LINQ?

Am un DataTable cu o coloana Name . Vreau să generez o colecție de nume unice ordonate în ordine alfabetică. Următoarea interogare ignoră clauza ordonată de .

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

De ce nu se aplică orderby ?

0
adăugat editat

5 răspunsuri

Problema este că Distinctul  operatorul nu acordă că va face acest lucru  să mențină ordinea inițială a  valori.

Deci, interogarea dvs. va trebui să funcționeze așa

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

Încercați următoarele

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

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

0
adăugat

Pentru a fi mai ușor de citit și mai ușor de întreținut, îl puteți împărți și în mai multe declarații LINQ.

  1. Mai întâi, selectați-vă datele într-o listă nouă, să o numim x1 , dacă doriți, faceți o proiecție
  2. Apoi creați o listă distinctă, de la x1 în x2 , folosind orice distincție doriți
  3. În cele din urmă, creați o listă ordonată de la x2 în x3 , sortați după ceea ce doriți
0
adăugat

Încercați următoarele:

dataTable.Rows.Cast().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);
0
adăugat

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

OrderBy trebuie să fie operațiunea finală.

0
adăugat