代码检查:函数无法转换为 SQL,且不得在数据库上下文中调用
Entity Framework 尝试将 LINQ 查询中的方法转换为将在 DBMS 中执行的 SQL。 但并非所有 .NET 方法都受支持。 当调用 LINQ to Entities 不支持的方法时,调用会在运行时失败,并且通常会抛出 不支持的操作异常。
要解决此问题,请确保仅在数据库上下文范围内使用那些可以转换为 SQL 的 LINQ 查询部分。 其他部分应在查询之后使用并在内存中执行:
在下面的示例中,一个不可转换的方法 Reverse() 方法 被调用在 Where() 方法 子句中,该子句直接绑定到数据库上下文。 当 Entity Framework 尝试解析此 LINQ 查询时,它必须将 Where() 方法 子句及其中的所有内容转换为 SQL,但失败了,因为 Reverse() 方法 没有对应的 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月 27日