LINQ to Entities无法识别方法'System.String ToString()'方法MVC3

时间:2013-07-15 17:45:00

标签: c# asp.net-mvc-3 visual-studio-2012

Error Description: LINQ to Entities无法识别方法'System.String ToString()'方法,并且此方法无法转换为商店表达式。

执行以下代码时出现错误:

public ActionResult NewBooking()
    {
        var db = new VirtualTicketsDBEntities2();

        IEnumerable<SelectListItem> items = db.Attractions
          .Select(c => new SelectListItem
          {
              Value = c.A_ID.ToString(),
              Text = c.Name
          });
        ViewBag.CategoryID = items;
        return View();
    }

有任何建议要摆脱这个错误吗?

感谢。

2 个答案:

答案 0 :(得分:9)

您可以使用AsEnumerable()更改从Linq到实体到Linq到对象的绑定上下文:

IEnumerable<SelectListItem> items = db.Attractions
    .AsEnumerable()
    .Select(c => new SelectListItem
    {
        Value = c.A_ID.ToString(),
        Text = c.Name
    });

答案 1 :(得分:4)

如果要对数据库进行转换,则需要使用SqlFunction

public ActionResult NewBooking()
{
    var db = new VirtualTicketsDBEntities2();

    IEnumerable<SelectListItem> items = db.Attractions
      .Select(c => new SelectListItem
      {
          Value = SqlFunctions.StringConvert((double)c.A_ID)
          Text = c.Name
      });
    ViewBag.CategoryID = items;
    return View();
}

问题是SqlFunctions不是标准的,可能不适用于所有数据库提供程序。如果这是一个问题,请使用AsEnumerable离开Entity Framework的可查询世界:

public ActionResult NewBooking()
{
    var db = new VirtualTicketsDBEntities2();

    IEnumerable<SelectListItem> items = db.Attractions.AsEnumerable()
      .Select(c => new SelectListItem
      {
          Value = c.A_ID.ToString()
          Text = c.Name
      });
    ViewBag.CategoryID = items;
    return View();
}