对象中的LINQ父子关系

时间:2017-04-10 06:48:52

标签: c# asp.net linq model-view-controller

我有以下课程

class Menu
{
  public int Id {get;set;}
  public String Title {get;set;}
  public List<MenuItems> MenuItems {get;set;}
}

class MenuItems
{
  public int id {get;set;}
  public String Title {get;set;}
  public String Address {get;set;} 
}

此应用程序在数据库中存储了一整套MenusMenuItems。然后将这些菜单项分配给特定用户。这个想法是,在UserLogin上,应该根据分配的MenuItem动态生成菜单栏。

我想将LINQ查询的结果存储在名为UserMenuBar

的类中
class UserMenuBar
{
  public int MenuId{get;set;}
  public String MenuTitle {get;set;}
  public List<MenuItems>{get;set;}  // Related MenuItems.. 
}

这是我的LINQ查询,

IEnumerable<UserMenuBar> m= from mnubar in p.Menus
                            join mitems in p.MenuItems
                            on mnubar.MenuItemId equals mitems.id
                            where mnubar.UserId == UName.UserId
                            select new Models.types.UserMenuBar
                            {
                             HeadId=mitems.MenuHeadId,
                             HeadTitle=mitems.MenuHead.MenuTitle
                            }

如何将MenuItem存储在List中。

非常感谢任何帮助..

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,那么您有2个表,MenuMenuItems,它们连在一起。 Menu可以包含多个MenuItems,并且您希望根据用户凭据显示此MenuBar

我建议使用以下数据结构

    class Menu
     {
       public int Id{get; set;}
       public String Title{get; set;}
       public List<MenuItems> MenuItems{get; set;}
       public int UserId {get; set;}
     }

    class MenuItem
     {
       public int MenuId{get; set;} // Link to the parent Menu Id
       public int Id{get; set;}
       public int Title{get; set;}
       public string Address{get; set;}
     }

您可以有2个查询来完成任务。

    IEnumerable<UserMenuBar> userMenuBar = from users in Users join
                                            menus in Menus on users.Id
                                             equals menus.UserId
                                              select
                                               {
                                                 MenuId = menus.Id,
                                                 MenuTitle = menus.Title
                                               };

现在根据菜单填充MenuItems。

    userMenuBar.ForEach(
      v => {
             v.MenuItems = (from menuItems in MenuItem
                            where menuItems.MenuId = v.MenuId
                             select menuItems).ToList();
           }
    );

希望它有所帮助!!!