需要您的帮助来构建LINQ查询或其他您认为可以解决我面临的问题的东西。
菜单实体
public partial class Menu
{
public int MenuID { get; set; }
public string MenuName { get; set; }
public int? ParentID { get; set; }
public string MenuURL { get; set; }
public int? MenuOrder { get; set; }
public string Icon { get; set; }
public bool IsActive { get; set; }
}
ParentID
属性创建父子关系。每个孩子(子菜单)都有父(顶级菜单)ID(即MenuID)。
RoleMenu实体
public partial class RoleMenu
{
public long RoleMenuID { get; set; }
public long? RoleID { get; set; }
public int? MenuID { get; set; }
public bool IsAdd { get; set; }
public bool IsDelete { get; set; }
public bool IsEdit { get; set; }
public bool IsView { get; set; }
public bool IsVerify { get; set; }
}
获取菜单项和子菜单项,但仅将IsActive
属性设置为true如果RoleMenu表中存在MenuID
,则针对特定RoleId。
在其中映射 ViewModel 的是:
public class MenuTreeViewModel
{
public int MenuID { get; set; }
public string MenuName { get; set; }
public int? ParentID { get; set; }
public string MenuURL { get; set; }
public int? MenuOrder { get; set; }
public string Icon { get; set; }
public bool IsActive { get; set; }
public bool IsAdd { get; set; }
public bool IsDelete { get; set; }
public bool IsEdit { get; set; }
public bool IsView { get; set; }
public bool IsVerify { get; set; }
public List<MenuTreeViewModel> SubMenus { get; set; }
}
直到现在我创建的query
:
viewModel.menuSubMenuTreeList =
(from menu in menuList
join subMenu in subMenuList
on menu.MenuID equals subMenu.ParentID
into merged
select new MenuTreeViewModel
{
MenuID = menu.MenuID,
MenuName = menu.MenuName,
MenuURL = menu.MenuURL,
IsActive = false,
ParentID = menu.ParentID,
Icon = menu.Icon,
MenuOrder = menu.MenuOrder,
SubMenus = merged.Select(x => new MenuTreeViewModel()
{
MenuID = x.MenuID,
MenuName = x.MenuName,
ParentID = x.ParentID,
Icon = x.Icon,
IsActive = false,
MenuOrder = x.MenuOrder,
MenuURL = x.MenuURL,
SubMenus = null
}).ToList()
}).ToList();
谢谢!