【问题标题】:Using URL.Action inside a LINQ select method在 LINQ 选择方法中使用 URL.Action
【发布时间】:2013-02-23 09:35:13
【问题描述】:

我想创建一个包含列表项的视图模型,每个项目都将包含编辑和删除操作 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)' 方法和这个 方法无法转换为商店表达式。

任何克服这个问题的方法...我真的不想自己开始创建这些 URL。

【问题讨论】:

    标签: c# asp.net-mvc linq url-action


    【解决方案1】:

    你的问题在这里:

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

    LINQ 尝试创建表达式树,它将映射到 SQL 代码,但它不知道如何映射 Url.Action。解决此问题的一种方法是更改 Linq to Entities to Linq to Objects,这可以在您的实体上使用ToList() 方法完成:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      • 1970-01-01
      • 2021-07-12
      • 1970-01-01
      相关资源
      最近更新 更多