Sql 转换为值类型';双倍';由于物化值为null-平均值,因此失败
我有一个查询,获取所有收集值的平均值。 这张桌子是学生的平均成绩Sql 转换为值类型';双倍';由于物化值为null-平均值,因此失败,sql,asp.net-mvc,linq,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.
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
操作数到平均值()的末尾。。但它导致了一个错误,即?不能应用于整数和双精度
有什么合适的方法可以做到这一点吗?基本上,
平均值
的规则与总和
的规则完全相同
我的首选方法是将不可为null的类型提升为可为null(以便针对可为null的类型命中相应的方法重载),并使用C#null合并运算符将结果转换回不可为null的类型:
...
select (double?)a.value
).Average() ?? 0;
基本上,
平均值
的规则与总和
的规则完全相同
我的首选方法是将不可为null的类型提升为可为null(以便针对可为null的类型命中相应的方法重载),并使用C#null合并运算符将结果转换回不可为null的类型:
...
select (double?)a.value
).Average() ?? 0;
是的,成功了!谢谢:戴普,成功了!谢谢:D