代码检查:函数无法转换为 SQL,且不得在数据库上下文中调用
Entity Framework 尝试将 LINQ 查询中的方法转换为将在 DBMS 中执行的 SQL。 但并非所有 .NET 方法都受支持。 当调用 LINQ to Entities 不支持的方法时,调用会在运行时失败,并且通常会抛出 不支持的操作异常。
要解决此问题,请确保仅在数据库上下文范围内使用那些可以转换为 SQL 的 LINQ 查询部分。 其他部分应在查询之后使用并在内存中执行:
在下面的示例中,一个不可转换的方法 反转() 被调用在 Where() 子句中,该子句直接与数据库上下文相关联。 当 Entity Framework 尝试解析此 LINQ 查询时,它必须将 Where() 子句及其中的所有内容转换为 SQL,但失败了,因为 反转() 没有对应的 SQL 等价物。
在这种情况下,解决方法是将 AsEnumerable() 和查询的执行上下文从数据库 IQueryable 移动到内存 IEnumerable 中:
public static void Test()
{
var context = new MyContext();
foreach (var person in
context.People.Where(person =>
person.Accounts.AsEnumerable().Reverse().Any()))
{
Console.WriteLine(person);
}
}
public static void Test()
{
var context = new MyContext();
foreach (var person in
context.People.AsEnumerable().Where(person =>
person.Accounts.Reverse().Any()))
{
Console.WriteLine(person);
}
}
最后修改日期: 2025年 9月 26日