一尘不染

LINQ to Entities无法识别方法'System.String ToString()',并且该方法无法转换为商店表达式

mysql

我正在将一些东西从一台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无法识别方法’System.String ToString()’,并且该方法无法转换为商店表达式。

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


阅读 368

收藏
2020-05-17

共1个答案

一尘不染

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

var strItem = item.Key.ToString();

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

出现问题是因为ToString()未真正执行,而是将其转换为MethodGroup,然后将其解析并转换为SQL。由于没有ToString()等效项,因此表达式失败。

注意:

确保您还检查了有关以后添加的帮助程序类的Alex的答案SqlFunctions。在许多情况下,它可以消除对临时变量的需要。

2020-05-17