2

リスト アイテムを保持するビュー モデルを作成したいのですが、各アイテムは編集と削除のアクション 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 の作成を開始したくありません。

4

1 に答える 1

2

あなたの問題はここにあります:

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

LINQ は、SQL コードにマップされる式ツリーを作成しようとしますが、マップする方法がわかりませんUrl.Action。これを修正する 1 つの方法は、Linq を Entities から Linq から Objects に変更ToList()することです。これは、エンティティのメソッドを使用して実行できます。

ListItems = _context.FaultTypes.ToList().Select(i => ...)
于 2013-02-23T09:39:11.857 に答える