首页 > 数据库 > mysql教程 > 为什么 LINQ to Entities 会引发'System.String ToString()”异常,以及如何修复它?

为什么 LINQ to Entities 会引发'System.String ToString()”异常,以及如何修复它?

Susan Sarandon
发布: 2025-01-18 15:26:18
原创
324 人浏览过

Why Does LINQ to Entities Throw a

LINQ to Entities:排除“System.String ToString()”错误

使用 LINQ to Entities (LINQ2E) 查询和操作关系数据库中的数据时,您可能会遇到错误:“LINQ to Entities 无法识别方法 'System.String ToString()' 方法,并且此方法无法翻译成商店表达式。” 当 LINQ 表达式以无法直接转换为 SQL 等效项的方式对字符串使用 ToString() 方法时,就会发生这种情况。

让我们来看看这个场景:

<code class="language-C#">using (var context = new Context())
{
    // ...

    foreach (var item in collection)
    {
        IQueryable<entity> pages = from p in context.pages
                                   where p.Serial == item.Key.ToString()
                                   select p;
        foreach (var page in pages)
        {
            DataManager.AddPageToDocument(page, item.Value);
        }
    }

    Console.WriteLine("Done!");
    Console.Read();
}</code>
登录后复制

这里,ToString() 是在 item.Key 子句中的 where(字符串)上调用的。 LINQ2E 很难将其转换为 SQL,因为 ToString() 缺乏直接的 SQL 对应项。

问题的解决方案

最直接的解决方案是将字符串值预先分配给变量:

<code class="language-C#">var strItem = item.Key.ToString();

IQueryable<entity> pages = from p in context.pages
                           where p.Serial == strItem
                           select p;</code>
登录后复制

这是有效的,因为 LINQ2E 现在将 strItem 视为常量,从而消除了翻译的需要。

替代解决方案(EF Core 2.1 及更高版本):

EF Core 2.1 及更高版本提供了 SqlFunctions 辅助类,专门为 LINQ2E 表达式提供了 StringConvert 方法:

<code class="language-C#">IQueryable<entity> pages = from p in context.pages
                           where p.Serial == SqlFunctions.StringConvert((double?)item.Key) // Note the cast to (double?)
                           select p;</code>
登录后复制

使用任一方法都可以解决“System.String ToString()”异常并确保您的 LINQ2E 查询正确执行。 请记住适当处理潜在的空值,如 (double?) 示例中的 SqlFunctions 转换所示。 这对于数据库兼容性通常是必需的。

以上是为什么 LINQ to Entities 会引发'System.String ToString()”异常,以及如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板