{the magic lies between the brackets}

[C#/.NET] – Liste in mehrere Listen splitten/gruppieren

Mein Problem war es zu Beginn eines früheren Projektes eine List<T> (in meinem Fall List<Reporter>) in mehrere Unterlisten zu sortieren.
Meine Klasse sah grob so aus:

     class Reporter
    {
        public string name;
        public string birthYear;

        public Reporter(string birthYear, string name)
        {
            this.name = name;
            this.birthYear = birthYear;
        }
    }

Meine Liste bestand aus mehreren Reportern und sah so aus:

Birthyear Name

  • 1991 Jon
  • 1992 Dominic
  • 1993 Jack
  • 1994 Hillary
  • 1991 Jackson
  • 1994 Jaqueline

Nun wollte ich die Liste in mehrere Listen splitten und zwar je nach Geburtsjahr:

Birthyear Name


1991 Jon

1991 Jackson


1993 Jack


1992 Dominic


1994 Hillary

1994 Jaqueline


Das Ergebnis erreichte ich relativ einfach mit einem Einzeiler:
Zuerst gruppierte ich die Liste mit einer Lambda-Expression nach dem Geburtsjahr:

 var groups = reporterList.GroupBy(x => x.birthYear); 

Danach wählte ich jede Gruppe aus (Lambda) und konvertierte jedes Element in eine Liste:

 var groups = groups.Select(grp => grp.ToList()); 

Und schlussendlich fügte ich alle Gruppen in eine Liste zusammen:

 var groups = groups.ToList(); 

Ein Einzeiler, der all das macht, ist einfach eine Aneinanderreihung dieser Befehle:

 var groups = reporterList.GroupBy(x => x.birthYear).Select(grp => grp.ToList()).ToList(); 

Und voíla hat man eine Liste aller Gruppen.