繁体   English   中英

使用Linq to Entities获取用户通过自我联接拥有的角色列表

[英]Using Linq to Entities to get a list of roles that a user has with a self join

我正在尝试构建一个使用Identity 2.0角色的动态菜单,以定义用户应看到的菜单项。 我是C#的新手,需要一些帮助!

出于我正在做的目的,我考虑一个角色作为菜单项,用户可以根据分配给他们的角色看到或不看到。 我有两个菜单项级别-父菜单项(例如“报告”)和子菜单项(例如“订单报告”,“收货报告”等)。

所以我的ApplicationRole类看起来像这样:

public string Description { get; set; }
public string MenuTitle {get;set;}
public string MenuIcon { get; set; }
public string ControllerName { get; set; }
public string ActionName { get; set; }

public virtual ApplicationRole ParentRole { get; set; }

我将仅针对用户存储角色,而ParentRole不为null。 我想知道为登录用户检索此角色列表并呈现菜单。

因此,逻辑将类似于:

  1. 获取用户已为其分配的所有菜单项(角色)的列表。
  2. 使用此列表,使用ParentRole可以获取父角色的独特列表(菜单的顶层)。
  3. 使用这两个列表,在下面填充我的视图模型:

     public class NavigationViewModel { public int MenuId { get; set; } public string MenuName { get; set; } public string ControllerName { get; set; } public string ActionName { get; set; } public string MenuIcon { get; set; } public IEnumerable<NavigationViewModel> ChildMenuItems { get; set; } } 

基本上,我正在创建一个具有顶级菜单和子菜单的菜单。

我的问题是,就查询数据库而言,我真的不知道从哪里开始。 理想情况下,我希望使用一个自我联接到Role表的查询,以在同一查询中获得Parent Role,但是我是C#和Linq的新手,并且不知道从哪里开始。

任何建议都很好。

我的建议是将ADO.NET Entity Data Model添加到项目中,然后从数据库中添加要查询的表。 然后一个.edmx文件与表和它们之间的关系创建,您可以在代码中访问它们(一DbContext与你的数据库名称,如创建YouDBNameEntities )。

现在您已连接到数据库,创建一个新的上下文:

YourDBNameEntities上下文=新的YourDBNameEntities();

之后,您可以加入已添加的表,并进行自我连接:

var Query = context.AddedTable.Join(context.AddedTable,...)

要么

var Query =来自context.AddedTable中的yourClassName1

  join yourClassName2 in context.AddedTable on yourClass1.ID equals yourClass2.ID where !yourClassName1.ParentRole.equals(null) select new { ParentRole = yourClassName1.ParentRole } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM