x.CustomerNr).DefaultIfEmpty(0).MaxAsync() + 1; 本质-6ren">
gpt4 book ai didi

c# - EF Core 的 DefaultIfEmpty 异常 "bug or limitation"

转载 作者:行者123 更新时间:2023-12-02 02:34:40 32 4
gpt4 key购买 nike

我尝试执行以下代码:

await _dbContext.Customers.Select(x => x.CustomerNr).DefaultIfEmpty(0).MaxAsync() + 1;

本质上,它必须从数据库中获取最高的客户编号并加 1。如果客户表为空,它应该返回 0,我添加 1。为什么它给我以下异常:

Linq error message

编辑:我正在使用 .NET Core 3.1 和 EF Core 3.0.1(EF Core 3.1.0 出现相同的错误)

最佳答案

避免使用默认值进行 DefaultIfEmpty 重载 - EF Core 查询转换器不支持它。

一般来说,还要避免对左外连接模式以外的任何内容使用 DefaultIfEmpty 无参数重载,因为虽然支持它,但 SQL 转换相当奇怪。

要解决在空集上应用 MaxMinAverage 方法的问题,请使用返回 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/

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