我尝试执行以下代码:
await _dbContext.Customers.Select(x => x.CustomerNr).DefaultIfEmpty(0).MaxAsync() + 1;
本质上,它必须从数据库中获取最高的客户编号并加 1。如果客户表为空,它应该返回 0,我添加 1。为什么它给我以下异常:
编辑: 我正在使用 .NET Core 3.1 和 EF Core 3.0.1(EF Core 3.1.0 出现相同的错误)
最佳答案
避免使用默认值进行 DefaultIfEmpty
重载 - EF Core 查询转换器不支持它。
一般来说,还要避免对左外连接模式以外的任何内容使用 DefaultIfEmpty
无参数重载,因为虽然支持它,但 SQL 转换相当奇怪。
要解决在空集上应用 Max
、Min
和 Average
方法的问题,请使用返回 null 的可空重载
为空集,如果需要,将 null
结果转换为 0(或其他所需的魔法值)。
将其应用到您的场景中将是这样的(假设 CustomerNr
类型为 int
):
(await _dbContext.Customers.MaxAsync(x => (int?)x.CustomerNr)) ?? 0 + 1;
关于c# - EF Core 的 DefaultIfEmpty 异常 "bug or limitation",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59555696/