OrderBy und Gruppierung
Sortieren und gruppieren Sie Ergebnisse.
OrderBy und Gruppierung ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.
Mit OrderBy sortieren
OrderBy sortiert eine Sequenz aufsteigend nach einem von Ihnen ausgewählten Schlüssel. Das Lambda gibt den Wert zurück, nach dem sortiert werden soll.
Der Operator gibt eine neue sortierte Sequenz zurück und ist stabil. Das bedeutet, dass Elemente mit gleichem Schlüssel ihre ursprüngliche relative Reihenfolge beibehalten.
using System;
using System.Linq;
int[] nums = { 4, 1, 3, 2 };
var sorted = nums.OrderBy(n => n);
Console.WriteLine(string.Join(", ", sorted));Absteigende Sortierung
OrderByDescending sortiert nach dem ausgewählten Schlüssel vom größten zum kleinsten Wert.
Verwenden Sie den Operator direkt, statt aufsteigend zu sortieren und anschließend die Reihenfolge umzukehren – so wird die Absicht klar ausgedrückt und in einem Durchlauf sortiert.
using System;
using System.Linq;
int[] scores = { 70, 95, 60, 88 };
var ranked = scores.OrderByDescending(s => s);
Console.WriteLine(string.Join(", ", ranked));Nach einer Eigenschaft sortieren
Bei Objekten wählen Sie die Eigenschaft aus, nach der sortiert werden soll. OrderBy(p => p.Age) sortiert Personen vom jüngsten zum ältesten.
Der Schlüssel kann jeden vergleichbaren Typ haben – Zahlen, Zeichenfolgen, Datumsangaben – oder einen beliebigen Typ, der IComparable implementiert.
using System;
using System.Linq;
using System.Collections.Generic;
record P(string Name, int Age);
var people = new List<P> { new("Ana", 30), new("Bo", 22) };
var byAge = people.OrderBy(p => p.Age);
foreach (var p in byAge) Console.WriteLine(p.Name);Sekundärsortierung mit ThenBy
ThenBy fügt ein zusätzliches Sortierkriterium hinzu. Nach OrderBy sortiert es Elemente mit demselben Primärschlüssel anhand eines zweiten Schlüssels.
Sie können mehrere Aufrufe von ThenBy/ThenByDescending verketten, um eine Sortierung auf mehreren Ebenen zu erstellen.
using System;
using System.Linq;
using System.Collections.Generic;
record P(string Name, int Age);
var people = new List<P> { new("Bo", 30), new("Ana", 30), new("Cy", 22) };
var ordered = people.OrderBy(p => p.Age).ThenBy(p => p.Name);
foreach (var p in ordered) Console.WriteLine($"{p.Age} {p.Name}");Warum kein zweites OrderBy
Ein zweiter Aufruf von OrderBy erzeugt kein zusätzliches Sortierkriterium – der zweite Aufruf sortiert alles vollständig neu und verwirft die erste Sortierung.
Für eine mehrstufige Sortierung verwenden Sie nach dem ersten OrderBy immer ThenBy.
using System;
using System.Linq;
using System.Collections.Generic;
record P(string N, int A);
var ps = new List<P> { new("Bo", 30), new("Ana", 30) };
var wrong = ps.OrderBy(p => p.A).OrderBy(p => p.N);
foreach (var p in wrong) Console.WriteLine(p.N);Abfragesyntax mit orderby
In der Abfragesyntax gibt es eine orderby-Klausel. Listen Sie mehrere Schlüssel, durch Kommas getrennt, auf; optional können Sie descending verwenden.
orderby p.Age, p.Name descending sortiert nach Alter und bei Gleichstand anschließend in umgekehrter Reihenfolge nach Name.
using System;
using System.Linq;
using System.Collections.Generic;
record P(string N, int A);
var ps = new List<P> { new("Bo", 30), new("Ana", 30), new("Cy", 22) };
var q = from p in ps orderby p.A, p.N select p.N;
Console.WriteLine(string.Join(", ", q));Gruppieren mit GroupBy
GroupBy unterteilt eine Sequenz in Gruppen, deren Elemente denselben Schlüssel haben. Das Ergebnis ist eine Sequenz von IGrouping<TKey, TElement>.
Jede Gruppierung stellt ihren Key bereit und kann selbst durchlaufen werden, um auf die Elemente dieser Gruppe zuzugreifen.
using System;
using System.Linq;
int[] nums = { 1, 2, 3, 4, 5, 6 };
var groups = nums.GroupBy(n => n % 2 == 0 ? "even" : "odd");
foreach (var g in groups)
Console.WriteLine($"{g.Key}: {string.Join(\",\", g)}");Gruppenschlüssel und Elemente
Der Key jeder Gruppe identifiziert die entsprechende Partition, und beim Durchlaufen der Gruppe erhalten Sie ihre Elemente. Sie können Count() direkt für eine Gruppe aufrufen.
So erstellen Sie Histogramme, Zählungen und Aufschlüsselungen nach Kategorien.
using System;
using System.Linq;
string[] fruit = { "apple", "avocado", "banana", "cherry" };
var byLetter = fruit.GroupBy(f => f[0]);
foreach (var g in byLetter)
Console.WriteLine($"{g.Key}: {g.Count()}");Gruppieren und anschließend projizieren
Ein häufig verwendetes Muster besteht darin, jede Gruppe nach GroupBy mit Select in ein Zusammenfassungsobjekt zu projizieren.
Sie lesen den Key aus und aggregieren die Elemente – beispielsweise zu einer Anzahl oder einer Summe pro Gruppe.
using System;
using System.Linq;
using System.Collections.Generic;
record Sale(string City, int Amt);
var sales = new List<Sale> { new("NY", 5), new("LA", 3), new("NY", 2) };
var totals = sales.GroupBy(s => s.City)
.Select(g => new { g.Key, Sum = g.Sum(x => x.Amt) });
foreach (var t in totals) Console.WriteLine($"{t.Key}={t.Sum}");GroupBy mit Elementauswahl
GroupBy verfügt über eine Überladung, die eine zweite Lambda-Funktion entgegennimmt – eine Elementauswahl. Sie legt fest, welche Daten in jeder Gruppe gespeichert werden, und nicht nur, wie die Gruppe anhand ihres Schlüssels gebildet wird.
Hier gruppieren wir nach Stadt, speichern aber nur die Beträge.
using System;
using System.Linq;
using System.Collections.Generic;
record Sale(string City, int Amt);
var sales = new List<Sale> { new("NY", 5), new("NY", 2) };
var g = sales.GroupBy(s => s.City, s => s.Amt);
foreach (var grp in g)
Console.WriteLine($"{grp.Key}: {string.Join(\",\", grp)}");Sortieren und Gruppieren sind verzögert
Sowohl OrderBy als auch GroupBy verwenden die verzögerte Ausführung – sie werden erst beim Aufzählen ausgeführt. Beachten Sie jedoch, dass Sortieren und Gruppieren die gesamte Quelle verarbeiten müssen, bevor sie das erste Element liefern können.
Im Gegensatz zu Where arbeiten sie daher nicht als Datenstrom; die Kosten fallen bei der ersten Iteration an.
using System;
using System.Linq;
int[] nums = { 3, 1, 2 };
var q = nums.OrderBy(n => n);
Console.WriteLine("Query built");
Console.WriteLine(string.Join(", ", q));Schnelltest
Denken Sie über Sortierungen auf mehreren Ebenen nach.
Zusammenfassung
OrderBy/OrderByDescending sortieren nach einem Schlüssel; ThenBy fügt zusätzliche Sortierkriterien hinzu. Ein zweiter Aufruf von OrderBy sortiert alles neu und ist kein zusätzliches Sortierkriterium.
GroupBy unterteilt eine Sequenz in IGrouping-Objekte mit einem Key und den zugehörigen Elementen, die häufig in Zusammenfassungen projiziert werden. Beide Operationen werden verzögert ausgeführt, verarbeiten aber die gesamte Quelle. Als Nächstes aggregieren und materialisieren wir die Ergebnisse.
Häufig gestellte Fragen
Ist die Lektion „OrderBy und Gruppierung“ kostenlos?
Ja — der vollständige Text von „OrderBy und Gruppierung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „OrderBy und Gruppierung“?
Sortieren und gruppieren Sie Ergebnisse. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C# Academy zu starten?
Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „OrderBy und Gruppierung“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?
Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Where und Filtern
- Select und Projektion
- OrderBy und Gruppierung
- Aggregationen und ToList