强制转换为值类型'double'失败,因为具体化值为 null - 平均值



我有一个查询,获取所有收集值的平均值。该表可作为学生的平均成绩马达。

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;

相关内容

最新更新