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();
}
有任何建议要摆脱这个错误吗?
感谢。
答案 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();
}