Entity framework core 枚举为空时,AverageAsync引发异常
使用实体框架核心,我有以下查询:Entity framework core 枚举为空时,AverageAsync引发异常,entity-framework-core,linq-to-entities,Entity Framework Core,Linq To Entities,使用实体框架核心,我有以下查询: var avgDuration = await projects.AverageAsync(x => x.Duration); 当枚举projects为空时,我得到以下错误: InvalidOperationException: Sequence contains no elements. 是否有一种方法可以AverageAsync在枚举为非元素时不引发异常 不应该只返回null 是否有一种方法可以AverageAsync在枚举为非元素时不引发异常
var avgDuration = await projects.AverageAsync(x => x.Duration);
当枚举projects
为空时,我得到以下错误:
InvalidOperationException: Sequence contains no elements.
是否有一种方法可以AverageAsync
在枚举为非元素时不引发异常
不应该只返回null
是否有一种方法可以AverageAsync
在枚举为非元素时不引发异常
不应该只返回null
当值类型为空时,Average
和AverageAsync
(以及Min
,Max
)将在空集上返回null
。如果不是,只需使用C#cast操作符将其升级为相应的可为null的类型
例如,如果您的示例中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);
使用DefaultIfEmpty不是更好吗?这不是它的目的吗?不确定。。。我试过了,但至少成功了。@MiguelMoura当
x
为null
(默认值)时,x.Duration
表达式如何DefaultIfEmpty
主要用于实现左外联接,因为缺少特殊的LINQ运算符。在这种情况下,持续时间从不为null。。。问题是当项目枚举为空时。您的问题中有什么遗漏吗?@MiguelMoura当您使用DefaultIfEmpty
时,当原始集合为空时,变量x
将为null
。因此x.Duration
将由于访问null
成员而产生异常。