枚举为空时,AverageAsync引发异常

时间:2019-05-23 18:22:01

标签: entity-framework-core linq-to-entities

使用Entity Framework Core,我有以下查询:

var avgDuration = await projects.AverageAsync(x => x.Duration);

当枚举projects为空时,出现以下错误:

InvalidOperationException: Sequence contains no elements. 

是否有一种方法可以AverageAsync在枚举不是元素时不引发异常。

不应该只返回null吗?

2 个答案:

答案 0 :(得分:2)

  

有没有一种方法可以使AverageAsync在枚举不是元素时不引发异常。

     

不应该只返回null吗?

AverageAverageAsync(以及MinMax)在值类型为 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);