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.