2013-02-23 2 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 к Entities не распознает метод «System.String Action (System.String, System.String, System.Object)» метод, и этот метод не может быть переведено в выражение хранилища.

Любой способ преодолеть это ... Я действительно не хочу начинать создавать эти URL самостоятельно.

ответ

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

Смежные вопросы