带有EF Core

时间:2020-01-01 20:01:31

标签: 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相同的错误)

1 个答案:

答案 0 :(得分:4)

避免使用默认值DefaultIfEmpty重载-EF Core查询翻译器不支持它。

除了左外部联接模式外,通常还避免对其他任何情况DefaultIfEmpty进行无参数重载,因为尽管受支持,但SQL转换非常奇怪。

要解决在空集上应用MaxMinAverage方法的问题,请使用可为空的重载,将空集返回null并转换{{ 1}}的结果为0(或其他所需的魔术值)。

将其应用于您的方案将是这样的(假设null类型为CustomerNr

int