2012-03-31 23 views
1

Ich habe eine Liste namens Länder, und jedes Land hat eine Liste von Städten, die wiederum eine Liste von Straßen hat. Und eine Straße hat eine Reihe von Häusern. Listet Listen innerhalb von Listen auf. Sehr einfach.Liste in Listen innerhalb von Listen

Ich muss eine Liste von Häusern erstellen, die in Ländern liegen, deren Namen mit dem Buchstaben "A" beginnen. Kein sehr logisches Beispiel, aber es ist leichter zu erklären als die komplexere Struktur, mit der ich es zu tun habe.

Dies ist natürlich nicht zu komplex und könnte getan werden, indem Sie eine Liste erstellen und dann alle Länder. Wo (Name.StartsWith ('A')), ForEaching alle Städte und schließlich jede Straße in diesem Stadt zur Liste.

Ich mag es nicht, dass Verfahren so möchte ich etwas schönere ...

Könnte dies durch die Verwendung so etwas wie Aggregate auf der Countries.Where() Liste getan werden? Wenn das so ist, wie? (Also, in einer einzigen Anweisung.)

Ja, die Auswahl wird nur auf der Top-Liste sein, so dass es einfacher machen sollte.

Antwort

2

Das sieht wie ein Job für Enumerable.SelectMany (die Sie eine Ebene der Hierarchie nicht gruppieren erlaubt):

List<County> countyList = GetCounties(); 

IEnumerable<County> aCounties = countyList 
    .Where(c => c.Name.StartsWith("A")); 

List<House> aCountyHouses = aCounties 
    .SelectMany(c => c.Towns) 
    .SelectMany(t => t.Streets) 
    .SelectMany(s => s.Houses) 
    .ToList();