dotnet runtime_error ai_generated true

Microsoft.EntityFrameworkCore.Query.QueryCompilationException:编译查询时发生异常。请查看 InnerException 获取详细信息。

Microsoft.EntityFrameworkCore.Query.QueryCompilationException: An exception occurred while compiling the query. See InnerException for details.

ID: dotnet/ef-core-query-compilation-failed

其他格式: JSON · Markdown 中文 · English
80%修复率
86%置信度
1证据数
2023-04-18首次发现

版本兼容性

版本状态引入弃用备注
EF Core 6.0 active
EF Core 7.0 active
EF Core 8.0 active

根因分析

EF Core 的查询管道无法将 LINQ 表达式转换为 SQL,原因是支持的操作,例如 Where 子句中的自定义方法调用或复杂的客户端评估。

English

EF Core's query pipeline fails to translate a LINQ expression into SQL due to unsupported operations, such as custom method calls in Where clauses or complex client-side evaluation.

generic

官方文档

https://learn.microsoft.com/en-us/ef/core/querying/client-eval

解决方案

  1. 重写查询,仅使用 EF Core 支持的函数。例如,将 'Where(x => MyHelper.Calculate(x.Value) > 10)' 替换为 'Where(x => x.Value > 10)' 或使用计算列。
  2. 在不支持的操作前使用 .ToList(),然后继续使用 LINQ to Objects:var list = context.Entities.Where(e => e.IsActive).ToList(); var result = list.Where(e => MyHelper.Calculate(e.Value) > 10);

无效尝试

常见但无效的做法:

  1. 70% 失败

    This pulls the entire table into memory, causing performance issues and potential OutOfMemoryException.

  2. 90% 失败

    This introduces SQL injection risks and loses the type safety of LINQ.