转换为值类型'double'失败,因为具体化值为null - AVERAGE

时间:2017-01-18 18:49:36

标签: sql asp.net-mvc linq

我有一个查询来获取所有收集值的平均值。 该表可作为学生的平均成绩电动机。

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()的末尾..但是它导致了一个错误,指出 ?? 无法应用于整数和双精度。

有没有正确的方法呢?

1 个答案:

答案 0 :(得分:3)

基本上Average的规则与Sum的规则完全相同。

我首选的方法是将非可空类型提升为可空(为了触​​及可为空的相应方法重载)并使用C#null-coalescing运算符将结果转换回非可空:

...
select (double?)a.value 
).Average() ?? 0;