Wie bekomme ich eine eindeutige, geordnete Liste von Namen aus einer DataTable mit LINQ?
Frage
Ich habe eine DataTable
mit einem Name
Spalte.Ich möchte erzeugen eine Sammlung von einzigartigen Namen alphabetisch sortiert.Die folgende Abfrage ignoriert order by Klausel.
var names =
(from DataRow dr in dataTable.Rows
orderby (string)dr["Name"]
select (string)dr["Name"]).Distinct();
Warum nicht die orderby
nicht durchgesetzt?
Lösung
Um es besser lesbar und wartbar, können Sie auch teilen es in mehrere LINQ-Anweisungen.
- Zuerst wählen Sie Ihre Daten in eine neue Liste, nennen wir es
x1
, ist , machen Sie eine Projektion, wenn gewünscht - Als Nächstes erstellen Sie eine eindeutige Liste aus
x1
inx2
, mit jeder Auszeichnung, die Sie benötigen - Schließlich erstellen Sie eine geordnete Liste von
x2
inx3
, Sortieren nach, was Sie sich wünschen
Andere Tipps
Das problem ist, dass die verschiedenen Betreiber werden nicht gewährt, es wird halten die ursprüngliche Reihenfolge der Werte.
Damit Ihre Abfrage benötigen, wie folgt zu arbeiten
var names = (from DataRow dr in dataTable.Rows
select (string)dr["Name"]).Distinct().OrderBy( name => name );
var sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);
Probieren Sie die folgenden:
dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);
Versuchen Sie die folgenden
var names = (from dr in dataTable.Rows
select (string)dr["Name"]).Distinct().OrderBy(name => name);
diese Arbeit sollte für das, was Sie brauchen.
Auf abstract:alle Antworten haben etwas gemeinsam.
OrderBy werden muss, um die Letzte operation.
Sie können etwas wie das:
dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);