Laden...

Klasse mit GroupBy zu einer Baumstruktur wandeln mit Linq

Erstellt von dasHund1982 vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.108 Views
D
dasHund1982 Themenstarter:in
4 Beiträge seit 2018
vor 5 Jahren
Klasse mit GroupBy zu einer Baumstruktur wandeln mit Linq

Hallo "mycsharp"-Mitstreiter,

leider bin ich mit LINQ nicht so bewandert, weshalb ich eure Hilfe bzw. ein gutes LINQ-Tut. benötige:

Ich habe eine "Liste<Song>". Die Klasse "Song" hat einen "Namen", gehört zu einem "Album", wurde kreiert durch einen "Author".

Nun würde ich gerne folgende "Baumstruktur" nachbilden:

Künster #1
L Album #1
L Song #1
L Song #2
L Song #n
L Album #n
L Song #n
Künster #n
L Album #n
L Song #n

Ich bin schon mal soweit:


var ls = new List<Song>();

var groupOfAuthors = from author in ls group author by author.Author;

foreach(var author in groupOfAuthors)	{
	Console.WriteLine(author.Key);

Aber wie kriege nun alle benötigten Infos um die oben beschriebene Struktur in der Konsole abbilden zu können? Ich hoffe ich konnte einigermaßen verständlich machen - vielen Dank schon mal im Voraus.

P. S. Habe in den "Artikeln" hier gesucht, aber nur "LINQ to SQL" gefunden. Wäre um eine geeigente Anlaufstelle sehr dankbar,

1.029 Beiträge seit 2010
vor 5 Jahren

Hi,

kurzum: du hast zu wenige Schleifen.

Das Thema ist: Wenn du nach Autor gruppierst, bekommst du ein IGrouping<string, Song>, dass du wiederum nach Album gruppieren kannst und ein neues IGrouping<string, Song> erhälst.

Das könnte z.B. folgendermaßen aussehen:

foreach (var author in songs.GroupBy(s => s.Author).OrderBy(a => a.Key))
            {
                Console.WriteLine(author.Key);
                foreach (var album in author.GroupBy(s => s.Album).OrderBy(a => a.Key))
                {
                    Console.WriteLine(album.Key);
                    foreach (var song in album.OrderBy(s => s.Name))
                    {
                        Console.WriteLine(song.Name);
                    }
                }
            }

LG

D
dasHund1982 Themenstarter:in
4 Beiträge seit 2018
vor 5 Jahren

Hallo "Taipi88",

vielen Dank für die schnelle Hilfe. Das mit den Schleifen das war mir klar, ich dachte nur man könnte - so wie in SQL üblich - eine verschachtelte Abfrage mit LINQ nachbilden und die Werte vor den Schleifen schon parat haben.

Vlt. habe ich aber auch einen falschen Gedankengang. Ich teste deinen Vorschlag, vielen Dank für deine Mühen.