LINQ to Entities不识别方法';System.String-ToString()';方法MVC

本文关键字:方法 String-ToString MVC System to LINQ Entities 识别 | 更新日期: 2023-09-27 18:22:20

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();
    }

有什么建议可以消除这个错误吗?

谢谢。

LINQ to Entities不识别方法';System.String-ToString()';方法MVC

您可以使用AsEnumerable()将绑定上下文从Linq更改为Entities,从Linq改为Objects:

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

如果要在数据库上进行转换,则需要使用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离开实体框架的可查询世界:

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();
}
相关文章: