ToString()
方法翻译问题问题:
执行包含 ToString()
方法的 LINQ to Entities 查询通常会导致错误:“LINQ to Entities 无法识别‘System.String ToString()’方法,并且此方法无法转换为存储表达式”。 发生这种情况是因为 ToString()
不能直接翻译成 SQL。
根本原因:
实体框架 (EF) 将 LINQ 查询转换为 SQL 以供数据库执行。 由于 ToString()
是 .NET 方法,而不是 SQL 函数,因此转换过程失败。
解决方案:
最可靠的解决方案是避免直接在 LINQ 查询中调用 ToString()
。 相反,应将 ToString()
的结果存储在变量中,然后再在查询中使用它。这使得 EF 能够正确翻译查询。
<code class="language-csharp">string strItem = item.Key.ToString(); IQueryable<entity> pages = from p in context.pages where p.Serial == strItem select p;</code>
EF Core 中的替代方案:
较新版本的 EF Core 提供了 SqlFunctions.StringConvert
方法,为 LINQ 查询中的字符串转换提供了更直接的方法,通常消除了对临时变量的需要。 然而,可变方法仍然是一个强大且广泛兼容的解决方案。
以上是为什么 LINQ to Entities 无法翻译 `ToString()` 以及如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!