gpt4 book ai didi

c# - ef 核心 : Sequence contains no element when doing MaxAsync

转载 作者:太空狗 更新时间:2023-10-29 22:05:01 24 4
gpt4 key购买 nike

我在我的 asp 核心 API 项目中使用 ef 核心。我必须找到最高阶索引。

例子:

数据表:Id, ForeignId, OrderIndex

所以我在做:

var highestOrderIndex = await _context
.ExampleDbSet
.Where(x =>
x.ForeignId == foreignId)
.MaxAsync(x =>
x.OrderIndex);

问题是当示例数据库集包含 0 个元素时。这将引发异常:Sequence 不包含任何元素

有没有一种优雅的方式来做到这一点?因为我不想从数据库中获取所有元素。它应该是异步的。

谢谢

最佳答案

实际上有一种非常优雅的方式(与其他答案中建议的相比性能更高,因为它只执行一个数据库查询)利用像 Min 这样的聚合方法这一事实Max 抛出 Sequence contains no element 异常仅当与不可为空的重载一起使用时,但可为空的重载只是返回 null 而不是。

因此,您只需将不可空属性类型提升为相应的可空类型即可。例如,如果 OrderIndex 类型是 int,则查询的唯一更改可能是

.MaxAsync(x => (int?)x.OrderIndex);

请注意,这也会将接收变量 highestOrderIndex 的类型更改为 int?。您可以检查 null 并做出相应的 react ,或者您可以简单地将聚合函数调用与 ?? 运算符组合并提供一些默认值,例如

var highestOrderIndex = (await _context.ExampleDbSet
.Where(x => x.ForeignId == foreignId)
.MaxAsync(x => (int?)x.OrderIndex)) ?? -1; // or whatever "magic" number works for you

关于c# - ef 核心 : Sequence contains no element when doing MaxAsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54098087/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com