c# - LINQ to Entities 无法识别方法 'System.String ToString()' 方法,并且该方法无法转换为存储表达式

标签 c# mysql sql linq

我正在将一些东西从一个 mysql 服务器迁移到一个 sql 服务器,但我不知道如何使这段代码工作:

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();
}

当它进入第二个 foreach (var page in pages) 时会抛出异常:

LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression.

有人知道为什么会这样吗?

最佳答案

只需将字符串保存到临时变量中,然后在您的表达式中使用它:

var strItem = item.Key.ToString();

IQueryable<entity> pages = from p in context.pages
                           where  p.Serial == strItem
                           select p;

问题出现是因为 ToString() 没有真正执行,它变成了 MethodGroup然后解析并翻译成SQL。由于没有 ToString() 等效项,因此表达式失败。

注意:

确保您还查看了 Alex's answer关于稍后添加的 SqlFunctions 辅助类。在许多情况下,它可以消除对临时变量的需要。

关于c# - LINQ to Entities 无法识别方法 'System.String ToString()' 方法,并且该方法无法转换为存储表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5899683/

相关文章:

mysql - 替换行内的部分值

c# - 在 ASP.NET MVC 4 中将缓存设置为最高级别

c# - 在 Azure Functions 中发出故障信号的最佳方式是什么?

c# - 如何比较 Color 对象并获得 Color[] 中最接近的 Color?

mysql - 选择mysql表中记录ID的第二个实例

mysql - 标准 SQL 以及上一行和下一行值

c# - 寻找一种允许在输出文件 (PDF) 中生成矢量图形的报告工具

mysql - 如果记录存在则添加 WHERE 子句

mysql - Slick 3.0 批量插入或更新(更新插入)

sql - 与表对象的交叉连接传播行(不需要 Table() 函数)