我喜欢用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表达式要容易得多。
希望这对你有帮助!