【发布时间】:2020-02-06 13:22:08
【问题描述】:
我正在尝试将我的项目从 .net core 2.2 迁移到 3.1,以下代码运行良好,但现在出现该错误:
System.InvalidOperationException:LINQ 表达式 'DbSet .Where(h => h.DATAI.AddDays((double)Convert.ToInt32((object)h.NRZILE)) >= __date_0 && h.DATAI.AddDays((double)Convert.ToInt32((object)h.NRZILE)) = __AddDays_1)' 无法翻译。以可翻译的形式重写查询,或显式切换到客户端评估 通过插入对 AsEnumerable()、AsAsyncEnumerable() 的调用, ToList() 或 ToListAsync()。
public async Task<IActionResult> getOp(int day, int month, int year, int daysToShow)
{
var date = new DateTime(year, month, day);
return Ok(await db.HT_REZ
.Where(r => (r.DATAI.AddDays(Convert.ToInt32(r.NRZILE)) >= date && r.DATAI.AddDays(Convert.ToInt32(r.NRZILE)) < date.AddDays(daysToShow))
|| (r.DATAI <= date.AddDays(daysToShow) && r.DATAI.AddDays(Convert.ToInt32(r.NRZILE)) >= date.AddDays(daysToShow))
)
.Select(r => new { r.ID, .... })
.ToListAsync()
);
}
我发现隐式客户端评估已在 EF Core 3 中禁用,我必须在过滤数据之前使用 AsEnumerable,但无法修复上述查询
感谢您的帮助
【问题讨论】:
-
r.DATAI的类型是什么?而r.NRZILE的类型呢? -
DATAI= DateTime,NRZILE=int?
标签: .net-core entity-framework-core