我有一个查询,获取所有收集值的平均值。该表可作为学生的平均成绩马达。
Model.UserClassAverage = (
from a in Db.averages
join s in Db.subjects on a.subjectId equals s.id
join c in Db.classes on s.classId equals c.id
where (c.id == userClassId)
|| (c.classTeacherId == userID)
select a.value
).Average();
问题是,每当我创建一个没有类的用户时,我都会收到一个错误,说
强制转换为值类型"double"失败,因为具体化值为 null
我在整个堆栈溢出中寻找答案,其中大多数适用于SUM
而不是AVERAGE
。
我试图将?? 0
操作数添加到 Average() 的末尾,但它导致了一个错误,说 ?? 不能应用于整数和双精度。
有什么正确的方法可以做到这一点吗?
基本上Average
的规则与Sum
完全相同。
我的首选方法是将不可空类型提升为可为空(以便命中可空的相应方法重载),并使用 C# 空合并运算符将结果转换回不可空:
...
select (double?)a.value
).Average() ?? 0;