que tienen este código (ok, no lo sé, pero algo similar: p)Suma() hace una excepción en lugar de devolver 0 cuando no hay filas
var dogs = Dogs.Select(ø => new Row
{
Name = ø.Name,
WeightOfNiceCats = ø.Owner
.Cats
.Where(æ => !æ.Annoying)
.Sum(æ => æ.Weight),
});
Aquí voy a través de todos los perros y resumir la peso (en un decimal no anulable) de todos los gatos no molestos que tiene el mismo dueño que el perro. Por supuesto, casi todos los gatos son molestos, por lo que me sale este error:
The null value cannot be assigned to a member with type System.Decimal which is a non-nullable value type.
Ninguno de los campos o las claves externas utilizadas pueden ser nulo. Entonces, el error ocurre cuando la cláusula Where
no devuelve gatos, lo que a menudo ocurre. Pero, ¿cómo puedo resolver esto? Quiero que devuelva 0 cuando eso suceda. Intentado con un DefaultIfEmpty()
después de la cláusula Where
, pero luego me sale este error:
Object reference not set to an instance of an object.
que supongo que es comprensible. He intentado añadir un ??
después de la Sum
, pero entonces no lo puedo compilar debido a este error:
Operator '??' cannot be applied to operands of type 'decimal' and 'decimal'
cual también tiene sentido, por supuesto. ¿Entonces Que puedo hacer? Sería bueno si la cosa Sum
acaba de regresar 0 cuando no había nada que resumir. O una declaración SumOrZero
de algún tipo. ¿Sería difícil hacer un método SumOrZero
que funcionara con Linq2SQL?
Gran pregunta. Es una pena que este comportamiento no esté documentado en MSDN. – Mykroft