ASP.Net MVC 按身份过滤

ASP.Net MVC Filter by Identity

我喜欢使用 ASP.Net 身份(角色)来过滤实体。我使用 ASP.NET 4.5 MCV EF6。

我的表是:

我在导航中对一个角色的筛选是:

var Nav= db.Navigations
                                .Join(db.NavigationRoles
                                ,n => n.NavigationId
                                ,nr =>nr.NavigationId
                                ,(n ,nr) => new { n , nr  })
                                .Where(x => x.nr.RoleId.Equals("dbd7d691-......"))
                                .Where(x => x.n.ParentId==1)
                                .Select(x=> x.n )
                                .Distinct()
                                .ToList() ;

我的用户可以有一组角色,所以我喜欢按这些集合进行过滤。 我通过以下方式收集角色:

 var UserRoleIDs = UserManager.FindById(UserId).Roles.Select(ri=> ri.RoleId);

我怎样才能很好地链接这些?

总的来说,我对 LINQ、Lambda 和 MVC 还是个新手。如果有人有办法改进此代码,请随时添加您的意见。

这里的技巧是在用户角色列表中使用 Contains()。这是您的实体的示例。

var UserRoleIDs = UserManager.FindById(UserId).Roles.Select(ri => ri.RoleId);


var query = from navRoles in db.NavigationRoles
            join nav in db.Navigations on navRoles.NavigationId equals nav.NavigationId
            where UserRoleIDs.Contains(navRoles.RoleId)
            select nav;


var distinct = query.Distinct().ToList();

我没有使用过 LINQ express,因为我发现在涉及连接时编写 lambda 表达式要容易得多。

希望对您有所帮助!