使用平均值返回“序列没有元素”

米格尔·莫拉(Miguel Moura)

我有以下Entity Framework 3.0查询:

var result = await posts
   .Where(x => x.Published.HasValue)
   .DefaultIfEmpty()
   .AverageAsync(x => x.Published.Day);

如果帖子中没有元素,则会出现错误:

The sequence has no elements

Post类是:

public class Post {
  public Int32 Id { get; set; }
  public DateTime? Published { get; set; }
}

使用Entity Framework Core 2.2时,这似乎可行。

有没有办法使这项工作?

伊万·斯托夫

这在使用Entity Framework Core 2.2时似乎有效

没错,这似乎在EF Core 3.0中已被打破。

我个人从来不喜欢的使用DefaultIfEmpty,以避免“的顺序没有任何元素” LINQ到对象的异常与LINQ合计方法AverageMinMax相反,我更喜欢使用强制转换来促进null在这种情况下会返回的可为空的重载,而不是抛出异常。这也是这些聚合方法的自然SQL行为,因此几乎总是正确转换,包括EF Core 3.0。

将其应用于相关查询:

var result = await posts
   .Where(x => x.Published.HasValue)
   .AverageAsync(x => (int?)x.Published.Value.Day);

请注意,结果的类型现在可以为空,因此,??如果需要将其转换为某个幻数,请使用运算符,例如

return result ?? 0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章