枚举为空时 AverageAsync 抛出异常

AverageAsync throws exception when enumeration is empty

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

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

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

InvalidOperationException: Sequence contains no elements. 

有没有办法AverageAsync在枚举不是元素时不抛出异常。

不应该 return 为空吗?

Is there a way to AverageAsync to not throw exception when enumeration as not elements.

Should not just return null?

AverageAverageAsync(以及 MinMax)将在空集上 return null 当值类型可为空。如果不是,只需使用 C# 转换运算符将其提升为相应的可空类型。

例如,如果在您的示例中 x.Duration 的类型是 int,则使用 int? cast:

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

如果您想在源集为空时得到 0(零),则只需将 ?? 0 应用于结果即可。

我找到了解决方法...使用 DefaultIfEmpty:

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