2013-02-23 52 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