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();
}
有什么建议可以消除这个错误吗?
谢谢。
您可以使用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();
}