ASP.Net MVC按身份筛选



我喜欢用ASP过滤实体。网络身份(角色)。我用的是ASP。净4.5 MCV ef6。

My Tables are:

  • 导航(NavigationId, NavName等)
  • NavigationRoles (NavigationId, RoleId, BlogRigth)

我在导航中的过滤器是:

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表达式,因为我发现当涉及到连接时编写lambda表达式要容易得多。

希望这对你有帮助!

相关内容

  • 没有找到相关文章

最新更新