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

标签 c# linq lambda entity-framework-core

我尝试执行以下代码:

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/

相关文章:

c# - IE6 : window. onresize 在 IIS 上工作,在 asp.net 开发服务器上崩溃

C# SQL Server CE 在解析查询时出错

c# - 使用 DeploymentItem 和 WatiN 的 MSTest - 文件未被复制

c# - 6 个 List<int> 对象的交集

amazon-web-services - AWS Lambda : How To Remove Environmental Variables from Configuration

c# - 如何轻松切换构建的引用路径?

c# - post 方法是否可以在继续该方法之前向用户返回确认框?

c# - LINQ MoreThan(predicate, limit) 扩展而不是 Count(predicate) > limit?

java - 使用 Stream <String> stream = Arrays.stream(words) 过滤唯一字数;

c# - 在 C# 中,=> 符号的含义