我有一个查询来获取所有收集值的平均值。 该表可作为学生的平均成绩电动机。
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()的末尾..但是它导致了一个错误,指出 ?? 无法应用于整数和双精度。
有没有正确的方法呢?
答案 0 :(得分:3)
基本上Average
的规则与Sum
的规则完全相同。
我首选的方法是将非可空类型提升为可空(为了触及可为空的相应方法重载)并使用C#null-coalescing运算符将结果转换回非可空:
...
select (double?)a.value
).Average() ?? 0;