猿问

Linq到实体不识别方法‘System.String ToString()’方法,而且该方法无法转换

Linq到实体不识别方法‘System.String ToString()’方法,而且该方法无法转换为存储表达式

我正在将一些东西从一个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 Entites不识别‘System.StringToString()’方法,而且该方法不能转换为存储表达式。

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


蓝山帝景
浏览 739回答 3
3回答

富国沪深

问题是,您正在LINQtoEntients查询中调用ToString。这意味着解析器正在尝试将ToString调用转换为其等效的SQL(这是不可能的.因此出现了异常)。您所要做的就是将ToString调用移动到一个单独的行:var&nbsp;keyString&nbsp;=&nbsp;item.Key.ToString();var&nbsp;pages&nbsp;=&nbsp;from&nbsp;p&nbsp;in&nbsp;context.entities&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where&nbsp;p.Serial&nbsp;==&nbsp;keyString&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select&nbsp;p;
随时随地看视频慕课网APP
我要回答