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

use*_*273 33 c# asp.net asp.net-mvc asp.net-mvc-4 ef-migrations

我正在使用MVC 4,我必须使用Code First Migrations更新我的数据库.我要做的是从数据库表中选择记录,并将它们插入下拉列表,用户可以在其中选择一个.

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

LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression.

控制器:

  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);
        }
Run Code Online (Sandbox Code Playgroud)

Var*_*n K 61

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

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

编辑:要更清楚,实体框架查询经营者的使用转换,如Select,WhereETC到一个SQL查询来加载数据.如果你调用一个类似的方法ToString(),哪个实体框架在sql中没有等价物,它会抱怨.因此,我们的想法是在数据加载后推迟使用这些函数.ToList,ToArrayETC强制执行查询,从而加载数据.一旦数据被加载,任何进一步的操作(如Select,Where使用LINQ到对象已经在存储器中执行ETC),上的数据.

  • 这种方法的主要问题是,如果从具有数千或数万条记录的表中进行选择,ToList会将它们全部从数据库中拉到一个对象中,然后再进行另一次选择.非常低效 - 更好地使用SqlFunctions:Value = SqlFunctions.StringConvert(c.id) (53认同)

归档时间:

查看次数:

52002 次

最近记录:

8 年,3 月 前