Asp.net mvc ASP.NETMVC按标识筛选

Asp.net mvc ASP.NETMVC按标识筛选,asp.net-mvc,linq,asp.net-identity,Asp.net Mvc,Linq,Asp.net Identity,我喜欢使用ASP.Net身份角色筛选实体。我使用了ASP.NET 4.5 MCV EF6 我的桌子是: 导航导航ID、导航名称等 导航角色导航ID、RoleId、BlogRigth 导航中一个角色的我的筛选器为: var Nav= db.Navigations .Join(db.NavigationRoles ,n => n.NavigationId

我喜欢使用ASP.Net身份角色筛选实体。我使用了ASP.NET 4.5 MCV EF6

我的桌子是:

导航导航ID、导航名称等 导航角色导航ID、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还是新手。如果有人有办法改进此代码,请随时添加您的视图。

您的技巧是在用户角色列表中使用。下面是一个关于实体的示例

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表达式要容易得多


希望这有帮助

非常感谢,起初我认为这不是函数,但当我检查我的表时,一切都正常。伟大的