ho questo codice (ok, non lo so, ma qualcosa di simile: p)Sum() provoca un'eccezione invece di restituire 0 quando nessun file
var dogs = Dogs.Select(ø => new Row
{
Name = ø.Name,
WeightOfNiceCats = ø.Owner
.Cats
.Where(æ => !æ.Annoying)
.Sum(æ => æ.Weight),
});
Qui mi passare attraverso tutti i cani e riassumere la peso (in un decimale non annullabile) di tutti i gatti non fastidiosi che ha lo stesso proprietario del cane. Naturalmente, più o meno tutti i gatti sono fastidiosi, così ottengo questo errore:
The null value cannot be assigned to a member with type System.Decimal which is a non-nullable value type.
Nessuno dei campi o chiavi esterne utilizzati possono essere nulli. Quindi l'errore si verifica quando la clausola Where
non restituisce gatti, cosa che spesso accade. Ma come posso risolvere questo? Voglio che restituisca 0 quando ciò accade. Provato con un DefaultIfEmpty()
dopo la clausola Where
, ma d'altra parte ottengo questo errore:
Object reference not set to an instance of an object.
che credo sia comprensibile. Ho provato ad aggiungere un ??
dopo il Sum
, ma poi non ci vorrà compilo a causa di questo errore:
Operator '??' cannot be applied to operands of type 'decimal' and 'decimal'
Il che rende anche il senso di corso. Quindi cosa posso fare? Sarebbe bello se la cosa Sum
restituisse 0 quando non c'era nulla da sommare. O una dichiarazione SumOrZero
di qualche tipo. Sarebbe difficile creare un metodo SumOrZero
che abbia funzionato con Linq2SQL?
Grande domanda. È un peccato che questo comportamento non sembra essere documentato nel MSDN. – Mykroft