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,
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
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.