Wie erhalte ich eine bestimmte, geordnete Liste von Namen aus einer Datatable mit LINQ?

stimmen
83

Ich habe ein DataTablemit einer NameSpalte. Ich möchte eine Sammlung der eindeutigen Namen alphabetisch geordnet erzeugen. Die folgende Abfrage ignoriert die Reihenfolge von Klausel.

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

Warum die orderbybekommen nicht durchgesetzt?

Veröffentlicht am 01/08/2008 um 14:14
quelle vom benutzer
In anderen Sprachen...                            


7 antworten

stimmen
51

Das Problem ist, dass der Distinct Betreiber gewährt nicht, dass es die ursprüngliche Reihenfolge der Werte beibehalten werden.

So wird Ihre Anfrage benötigen, wie dies funktioniert

var names = (from DataRow dr in dataTable.Rows
             select (string)dr["Name"]).Distinct().OrderBy( name => name );
Beantwortet am 01/08/2008 um 14:18
quelle vom benutzer

stimmen
30

Um es besser lesbar und wartbar, können Sie es auch aufgeteilt in mehrere LINQ Aussagen.

  1. Wählen Sie zuerst Ihre Daten in eine neue Liste, nennen wir es x1, einen Vorsprung zu tun , wenn gewünscht
  2. Als nächstes eine eigene Liste erstellen, aus x1in x2, mit was auch immer Sie benötigen Unterscheidung
  3. Schließlich erstellen Sie eine geordnete Liste von x2in x3, Sortieren nach , was auch immer Sie wünschen
Beantwortet am 04/09/2008 um 03:57
quelle vom benutzer

stimmen
8
var sortedTable = (from results in resultTable.AsEnumerable()
select (string)results[attributeList]).Distinct().OrderBy(name => name);
Beantwortet am 05/12/2008 um 02:08
quelle vom benutzer

stimmen
5

Probieren Sie die folgenden:

dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);
Beantwortet am 28/04/2013 um 10:27
quelle vom benutzer

stimmen
1

Versuche Folgendes

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

Dies sollte für die Arbeit, was Sie brauchen.

Beantwortet am 07/08/2008 um 03:35
quelle vom benutzer

stimmen
0

Sie können so etwas verwenden:

dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);
Beantwortet am 25/06/2018 um 10:56
quelle vom benutzer

stimmen
0

Abstrahieren: alle Antworten haben etwas gemeinsam.

SortiertNach muss die letzte Operation sein.

Beantwortet am 30/01/2018 um 16:19
quelle vom benutzer

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