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;
Du musst angemeldet sein, um einen Kommentar abzugeben.
wäre mein Angebot; es ist eine ärgerliche Panne, dass die SUMME in der SQL über die 0 Zeilen ist
NULL
, nicht0
- die oben genannten arbeiten rund um die.oder als Lambda-Ausdrücke (aus den Kommentaren):