使用Entity Framework Core,我有以下查询:
var avgDuration = await projects.AverageAsync(x => x.Duration);
当枚举projects
为空时,出现以下错误:
InvalidOperationException: Sequence contains no elements.
是否有一种方法可以AverageAsync
在枚举不是元素时不引发异常。
不应该只返回null吗?
答案 0 :(得分:2)
有没有一种方法可以使
AverageAsync
在枚举不是元素时不引发异常。不应该只返回null吗?
Average
和AverageAsync
(以及Min
,Max
)在值类型为 nullable <时将在空集上返回null
/ em>。如果不是,只需使用C#cast操作符将其提升为相应的可为空的类型即可。
例如,如果您的示例中x.Duration
的类型为int
,则使用int?
强制类型转换:
var avgDuration = await projects.AverageAsync(x => (int?)x.Duration);
如果您想在源集为空时获得0(零),则只需对结果应用?? 0
。
答案 1 :(得分:0)
我找到了解决问题的方法...使用DefaultIfEmpty:
var avgDuration = await projects.DefaultIfEmpty().AverageAsync(x => x.Duration);