Wie bekomme ich eine eindeutige, geordnete Liste von Namen aus einer DataTable mit LINQ?

StackOverflow https://stackoverflow.com/questions/59

  •  08-06-2019
  •  | 
  •  

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?

War es hilfreich?

Lösung

Um es besser lesbar und wartbar, können Sie auch teilen es in mehrere LINQ-Anweisungen.

  1. Zuerst wählen Sie Ihre Daten in eine neue Liste, nennen wir es x1, ist , machen Sie eine Projektion, wenn gewünscht
  2. Als Nächstes erstellen Sie eine eindeutige Liste aus x1 in x2, mit jeder Auszeichnung, die Sie benötigen
  3. Schließlich erstellen Sie eine geordnete Liste von x2 in x3, 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"]);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top