枚举为空时 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?
Average
和 AverageAsync
(以及 Min
、Max
)将在空集上 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);
使用 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?
Average
和 AverageAsync
(以及 Min
、Max
)将在空集上 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);