Sortieren in Linq

Angenommen man möchte eine Liste von Personen sortieren. Die Klasse sieht in etwa wie diese aus:

public class Person
{
public int ID { get; set; }
public string Vorname { get; set; }
public string Nachname { get; set; }
}

Das Sortieren nach Nachnamen ist noch einfach:


List<Person> personen = new List<Person>();
//.......Laden der Liste

personen.OrderBy(p => p.Nachname);

Aber was, wenn zwei Personen den gleichen Nachnamen haben?

personen.OrderBy(p => p.Nachname).OrderBy(p => p.Vorname);

Das ist nicht die Lösung. Die Liste wird nun nur noch nach Vorname sortiert.

Die Lösung ist die Extension „ThenBy“, damit wird nun innerhalb eines Nachnamens nach Vornamen sortiert – wie gewünscht!

personen.OrderBy(p => p.Nachname).ThenBy(p => p.Vorname);

Ich persöhnlich sortiere zum Schluss gerne noch nach etwas syntetischem – beispielsweise der ID.
Das hat den Vorteil, dass selbst im unmöglichsten Fall (in diesem Beispiel, dass zwei den gleichen Vor- und Nachnamen haben) immer eine definierte Reihenfolge festgelegt ist. Selbst in diesem Fall, erhält der User in der Oberfläche immer eine definierte Reihenfolge. Gerade bei PLinq kann man sich ja auf die Reihenfolge gar nicht mehr verlassen..

personen.OrderBy(p => p.Nachname).ThenBy(p => p.Vorname).ThenBy(p=>p.ID);
Dieser Beitrag wurde unter .Net veröffentlicht. Setze ein Lesezeichen auf den Permalink.