LINQ to Entities 错误:ToString()
不支持方法
在 MySQL 和 SQL Server 等数据库之间迁移数据有时会触发此 LINQ to Entities 错误:
“LINQ to Entities 无法识别‘System.String ToString()’方法,并且此方法无法转换为存储表达式。”
当您尝试在 LINQ 查询中使用 ToString()
方法将字符串与数据库字段进行比较时,就会发生这种情况。 问题是 ToString()
不是标准 SQL 函数,LINQ to Entities 无法将其转换为等效的 SQL 代码。
解决方案:使用临时变量
最简单的解决方案是将 ToString()
的字符串结果存储在变量 中,然后 在 LINQ 查询中使用它:
<code class="language-csharp">var strItem = item.Key.ToString(); IQueryable<entity> pages = from p in context.pages where p.Serial == strItem select p;</code>
这避免了在 LINQ 表达式中直接使用 ToString()
,解决了翻译问题。
替代方案:雇用SqlFunctions
在某些情况下,SqlFunctions
帮助器类提供了替代方案。 它提供了 LINQ to Entities可以翻译的数据库特定函数:
<code class="language-csharp">IQueryable<entity> pages = from p in context.pages where p.Serial == SqlFunctions.StringConvert(item.Key) select p;</code>
SqlFunctions.StringConvert()
执行与 ToString()
类似的转换,但转换方式与数据库的 SQL 方言兼容。
说明:
核心问题在于LINQ to Entities如何处理表达式。 它不直接执行ToString()
;相反,它尝试将整个表达式转换为 SQL。由于 ToString()
没有直接的 SQL 等效项,因此转换失败,导致异常。 上述解决方案通过预处理字符串或使用数据库兼容的函数来规避此问题。
以上是为什么 LINQ to Entities 会抛出'方法'System.String ToString()'无法识别”异常,如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!