JetBrains Rider 2025.2 Help

代码检查:函数无法转换为 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日