我正在使用 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 将您对查询运算符(如 Select
、Where
ETC)的使用转换为 sql 查询以加载数据。如果您调用像 ToString()
这样的方法, Entity Framework 在 sql 中没有对应的方法,它会报错。所以这个想法是推迟在数据加载后使用这些功能。 ToList
, ToArray
ETC 强制执行查询从而加载数据。加载数据后,将使用 Linq to Objects 对内存中已有的数据执行任何进一步的操作(例如 Select
、Where
ETC)。
关于c# - LINQ to Entities 无法识别 MVC 4 中的方法 'System.String ToString()' 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18233495/