Summe verschachtelte Werte mit Linq

Einfaches problem: ich habe Benutzer, die haben viele Aufträge haben kann, dass viele Produkte. Was bedeutet die Linq (lambda) Abfrage Aussehen wie ein Benutzer die Gesamtsumme aller Produkt.Preis-Werte?

Habe ich versucht, dieses:

int total = users.Sum(u => u.Orders.Sum(o => o.Products.Sum(p => p.Price)));

Aber es ist mir:

Den cast zu Wert-Typ 'Int32' ist fehlgeschlagen, da die materialisierte Wert null ist. Entweder der Ergebnis-Typ des generischen Parameters oder der Abfrage muss ein nullable-Typ.

Natürlich, ein Benutzer kann keine Bestellungen, und eine Bestellung kann nicht irgendwelche Produkte. Aber Produkt.Preis nicht eine null-Wert.

So, ich versuchte dies und dachte, es war erstickt an leeren Sammlungen:

int total = users.Sum(u => u.Orders.Sum(o => o.Products.Sum(p => p.Price) ?? 0) ?? 0) ?? 0;

Aber es wirft Fehler bei der Kompilierung, nämlich der linken Seite der ?? null ist nicht zulässig.

Was mache ich falsch?

Vielen Dank im Voraus.

UPDATE: EINE funktionierende version von meine Beispiele oben, nachdem mit Marc ' s logic aus seiner Antwort:

int total = users.Sum(u => u.Orders.Sum(o => o.Products.Sum(p => (int?)p.Price))) ?? 0;
InformationsquelleAutor Jerad Rose | 2011-05-05
Schreibe einen Kommentar