Ich versuche, verschachtelte Objekte wie folgt zu reduzieren:
public class Book
{
public string Name { get; set; }
public IList<Chapter> Chapters { get; set; }
}
public class Chapter
{
public string Name { get; set; }
public IList<Page> Pages { get; set; }
}
public class Page
{
public string Name { get; set; }
}
Lassen Sie mich ein Beispiel geben. Dies sind die Daten, die ich habe
Book: Pro Linq
{
Chapter 1: Hello Linq
{
Page 1,
Page 2,
Page 3
},
Chapter 2: C# Language enhancements
{
Page 4
},
}
Das Ergebnis, das ich suche, ist die folgende flache Liste:
"Pro Linq", "Hello Linq", "Page 1"
"Pro Linq", "Hello Linq", "Page 2"
"Pro Linq", "Hello Linq", "Page 3"
"Pro Linq", "C# Language enhancements", "Page 4"
Wie könnte ich das erreichen? Ich könnte es mit einem Select New machen, aber mir wurde gesagt, dass ein SelectMany ausreichen würde.
.Select(p => new FlatBook(b.Name, c.Name, p.Name))
myBooks.SelectMany(b => b.Chapters).SelectMany(c => c.Pages).Select(p => b.Name + ", " + c.Name + ", " + p.Name);
myBooks.SelectMany(b => b.Chapters == null || !b.Chapters.Any()? new []{b.Name + " has no Chapters"} : b.SelectMany(c => c.Pages.Select(p => b.Name + ", " + c.Name + ", " + p.Name)));
Angenommen, es
books
ist eine Liste von Büchern:quelle
IEnumerable<Book>
es tun wird, braucht keinList<Book>
.quelle
Ich habe versucht, dies auch zu tun, und aus Yuriys Kommentaren und dem Durcheinander mit linqPad habe ich dies ..
Beachten Sie, dass ich keine Bücher, Kapitel, Seiten, Personen (Bücher), Unternehmenspersonen (Kapitel) und Unternehmen (Seiten) habe.
oder
Von mir verwendete Referenzseite : http://odetocode.com/blogs/scott/archive/2008/03/25/inner-outer-lets-all-join-together-with-linq.aspx
quelle