ich diesen Code haben (ok, ich weiß nicht, aber etwas ähnliches: p)Sum() verursacht Ausnahme statt 0 zurückzugeben, wenn keine Zeilen
var dogs = Dogs.Select(ø => new Row
{
Name = ø.Name,
WeightOfNiceCats = ø.Owner
.Cats
.Where(æ => !æ.Annoying)
.Sum(æ => æ.Weight),
});
Ich gehe hier durch alle Hunde und resümieren die Gewicht (in eine nicht nullbare Dezimalzahl) aller nicht nervigen Katzen, die den gleichen Besitzer wie der Hund haben. Natürlich, so ziemlich alle Katzen ärgerlich, so bekomme ich diesen Fehler:
The null value cannot be assigned to a member with type System.Decimal which is a non-nullable value type.
Keines der Felder oder Fremdschlüssel verwendet null sein kann. Der Fehler tritt also auf, wenn die Klausel Where
keine Katzen zurückgibt, was oft der Fall ist. Aber wie kann ich das lösen? Ich möchte, dass es 0 zurückgibt, wenn das passiert. Versuchte mit einem DefaultIfEmpty()
nach der Where
Klausel, aber dann bekomme ich diesen Fehler:
Object reference not set to an instance of an object.
Was ich denke, ist verständlich. Ich versuchte, ein ??
nach den Sum
, hinzufügen, aber dann wird es nicht kompiliert aufgrund dieses Fehlers:
Operator '??' cannot be applied to operands of type 'decimal' and 'decimal'
Welche auch Sinn macht natürlich. Was kann ich also tun? Wäre schön wenn die Sum
Sache gerade 0 zurückgibt wenn es nichts zu summieren gibt. Oder eine SumOrZero
Aussage irgendeiner Art. Wäre es schwierig, eine SumOrZero
Methode zu erstellen, die mit Linq2SQL funktioniert?
Große Frage. Es ist eine Schande, dass dieses Verhalten nicht im MSDN dokumentiert ist. – Mykroft