c# - LINQ to Entities 无法识别 MVC 4 中的方法 'System.String ToString()' 方法

标签 c# asp.net asp.net-mvc asp.net-mvc-4 entity-framework-migrations

我正在使用 MVC 4,我必须使用代码优先迁移更新我的数据库。我想要做的是从数据库表中选择记录,并将它们插入到用户可以选择的下拉列表中。

我有一个我不明白的错误:

LINQ to Entities 无法识别“System.String ToString()”方法,并且无法将此方法转换为存储表达式。

Controller :

  public ActionResult Addnew()
        {
            var dba = new DefaultConnection();
            var query = dba.blob.Select(c => new SelectListItem
            {
                Value = c.id.ToString(),
                Text = c.name_company,
                Selected = c.id.Equals(3)
            });
            var model = new Companylist
            {
                xpto = query.AsEnumerable()
            };

            return View(model);
        }

最佳答案

你得到这个错误是因为 Entity Framework 不知道如何在 sql 中执行 .ToString() 方法。因此,您应该使用 ToList 加载数据,然后将其转换为 SelectListItem 为:

var query = dba.blob.ToList().Select(c => new SelectListItem
    {
    Value = c.id.ToString(),
    Text = c.name_company,
    Selected = c.id.Equals(3)
});

编辑:为了更清楚,Entity Framework 将您对查询运算符(如 SelectWhere ETC)的使用转换为 sql 查询以加载数据。如果您调用像 ToString() 这样的方法, Entity Framework 在 sql 中没有对应的方法,它会报错。所以这个想法是推迟在数据加载后使用这些功能。 ToList, ToArray ETC 强制执行查询从而加载数据。加载数据后,将使用 Linq to Objects 对内存中已有的数据执行任何进一步的操作(例如 SelectWhere ETC)。

关于c# - LINQ to Entities 无法识别 MVC 4 中的方法 'System.String ToString()' 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18233495/

相关文章:

C# BaseStream 返回相同的 MD5 散列,不管流中有什么

c# - 使用 HTMLEditorExtender 的文本框在按 Enter 时不会插入新行

javascript - 10 秒延迟(无法滚动或单击按钮),即使在浏览器的加载微调器完成并且所有内容都出现在页面上之后

javascript - 在没有 Ajax 的情况下使用 Javascript 中的 C# 对象的属性更新输入元素?

asp.net-mvc - 字符串模型,将值传递给 Controller ​​问题

c# - 使用 DataTemplate 重用选项卡内容

c# - 用 C# 模仿 AutoCAD 的 viewcube 的行为

c# - 在服务器端解码查询字符串值

c# - 如何防止在文本框上按 Enter 键时重定向到另一个 aspx 页面?

jquery - 在 ASP.Net MVC 中,ModelState 可以与 ajax 更新一起使用吗?