LINQ父子关系操纵属性

时间:2018-07-06 01:06:48

标签: c# asp.net linq

需要您的帮助来构建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();

谢谢!

0 个答案:

没有答案