[英]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。 我想知道为登录用户检索此角色列表并呈现菜单。
因此,逻辑将类似于:
ParentRole
可以获取父角色的独特列表(菜单的顶层)。 使用这两个列表,在下面填充我的视图模型:
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.