我想创建一个包含列表项的视图模型,每个项目都会保存编辑和删除操作URL,因此我有以下代码:
public ActionResult Index()
{
AdministrationViewModel model = new AdministrationViewModel();
using (var _context = new CamelotFaultManagementEntities())
{
model.FaultTypes = new ListViewModel()
{
ListTitle = AdministrationStrings.FaultTypesAdministrationTab,
AddNewItemURL = "#",
AddNewItemButtonTitle = SharedStrings.Add + " " + SharedStrings.FaultType,
ListItems = _context.FaultTypes.Select(type => new ListItemViewModel() {
ListItemID = type.FaultTypeID,
ListItemName = type.FaultTypeName,
ListItemDescription = type.FaultTypeDescription,
DeleteActionURL = @Url.Action("DeleteFaultType","Administration", new {FaultTypeID = type.FaultTypeID}),
EditActionURL = @Url.Action("EditFaultType", "Administration", new { FaultTypeID = type.FaultTypeID }),
}).ToList()
};
}
return View("Administration",model);
}
问题是我在运行时收到错误
LINQ to Entities无法识别方法'System.String Action(System.String,System.String,System.Object)'方法,以及此方法 方法无法转换为商店表达式。
任何解决此问题的方法......我真的不想自己开始创建这些网址。
答案 0 :(得分:2)
你的问题在这里:
DeleteActionURL = @Url.Action("DeleteFaultType","Administration", /*...*/),
EditActionURL = @Url.Action("EditFaultType", "Administration", /*...*/)
LINQ尝试创建表达式树,它将映射到SQL代码,但它不知道如何映射Url.Action
。修复此问题的一种方法是更改 Linq to Linity to Objects的实体,这可以使用您实体上的ToList()
方法完成:
ListItems = _context.FaultTypes.ToList().Select(i => ...)