我正在将一些东西从一台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实体无法识别该方法的系统.一串

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

推荐答案

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

var strItem = item.Key.ToString();

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

问题的出现是因为ToString()并没有真正执行,它被转换成MethodGroup,然后被解析并转换成SQL.由于没有ToString()类似功能,表达式失败.

Note:

确保您还查看了Alex's answer个关于后来添加的SqlFunctions helper类的信息.在许多情况下,它可以消除对临时变量的需要.

Mysql相关问答推荐

mySQL错过字符串计数,错误?

是否有一种方法可以在mysql中设置一列,使其自动成为该行的行号的值?

SQL查询仅插入5行

MySQL查询获取图书的唯一读取页面数

带有值分隔的MySQL分组不起作用

如何查询一行

Mysql:使用like Select 查询

从单行中获取最大日期的最佳方法

为什么Mysql会根据查询参数改变查询执行计划?

模拟Mysql Cursor类的fetchone()方法,并将其返回值设置为None

是否可以使用以EXPLAIN EXTENDED ...开头的 SQL 语句修改数据?

使用 Having 表达式连接多个表

使用适配器设计模式和外观设计模式实现

MySql,如何从列中替换某种格式的字符串

MySQL 中的 LATERAL 语法 - 是否只是说左表首先执行以便下一个可以引用它?

MySQL IF() 函数根据指定条件执行代码块

Golang Gorm没有从关联表中检索数据

如何在 MySQL 中为用户设置默认架构

在 MySQL 中找不到 outfile 创建的文件

在 MySQL 中的子查询上使用 GROUP_CONCAT