2013-02-23 51 views
2

我想创建一个保存列表项的视图模式,每个项目内将保持编辑和删除操作URL,所以我有以下代码:使用URL.Action一个LINQ选择方法

 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实体无法识别方法“System.String 动作(System.String,System.String,System.Object的)”方法,和这种方法 不能被翻译成商店表达。

任何方法来克服这个......我真的不想开始创建自己的这些网址。

回答

2

你的问题是在这里:

DeleteActionURL = @Url.Action("DeleteFaultType","Administration", /*...*/), 
EditActionURL = @Url.Action("EditFaultType", "Administration", /*...*/) 

LINQ试图创建表达式目录树,这将被映射到SQL代码,但它不知道如何映射Url.Action。解决这个问题的方法之一是变化 LINQ到实体到LINQ到对象,可以使用ToList()方法对你的实体来完成:

ListItems = _context.FaultTypes.ToList().Select(i => ...) 
+0

这样一个简单的解决方法!谢谢 ! – Mortalus 2013-02-23 10:02:45