【发布时间】:2013-05-26 07:54:40
【问题描述】:
我有一个具有以下结构的架构;
基本上,菜单可以有嵌套的子项。而其他表只包含ItemType,以及该项目的ID,即ItemTypeId(当用户在后端选择选项时会动态引用这些)。
现在,为了显示菜单,我在这里使用了Inner Join(我想在这里使用Left Outer Join);
public IQueryable<Menu> GetMenuWithAsset()
{
return DbContext.Set<Menu>()
.Join(DbContext.Set<Asset>(), m => m.MenuId, a => a.MenuId, (m, a) => m);
}
在我的基本控制器中,我正在这样获取它;
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var menus = Uow.Menus.GetMenuWithAsset()
.Select(m => new ParentMenuViewModel()
{
MenuId = m.MenuId,
Name = m.Name,
ParentId = m.ParentId
})
.ToList<ParentMenuViewModel>();
ViewBag.Menus = CreateVM(0, menus);
base.OnActionExecuting(filterContext);
}
public IEnumerable<ParentMenuViewModel> CreateVM(int parentid, List<ParentMenuViewModel> list)
{
var newList = list.Where(m=> m.ParentId==parentid)
.Select(m=> new ParentMenuViewModel()
{
MenuId = m.MenuId,
Name = m.Name,
ParentId = m.ParentId,
ChildMenus = CreateVM(m.MenuId, list)
});
return newList;
}
并且此代码按预期正常工作。但是,这就是我想要的;
1) 我想在 Asset 表中显示所有菜单(包括子菜单),无论我们是否有数据(我是左外连接)。
2) 我想使用强类型视图模型来实现这一点,它将包含两个表中的以下属性
i) MenuId ii) 名称 iii)ParentId iv) ChildMenus v)MenuItemType vi) MenuItemTypeId
我试图从 4 天开始解决这个问题。对此的任何帮助都是值得赞赏的;
【问题讨论】:
-
为什么需要它是“扩展方法语法”?在大多数情况下,它只会让阅读变得更加困难。
-
ok,如果可以的话,在查询语法中也是可以接受的
标签: c# asp.net asp.net-mvc linq asp.net-mvc-4