我正在使用linq to SQL和asp.net成员资格提供程序。我设置了三个角色,但只想获得特定角色的用户。这是我返回所有用户的查询
public IQueryable<aspnet_User> GetAllMembers()
{
return db.aspnet_Users.OrderByDescending(u => u.UserName);
}
有人能指出我正确的方向吗?
由于
答案 0 :(得分:2)
看起来你需要和here所讨论的相同的东西。 Tvanfosson未经测试的答案是最受欢迎的答案:
var users = db.aspnet_Users
.Where(u => u.Active)
.Any(u => u.aspnet_UsersInRoles
.Any(r => r.aspnet_Roles.RoleName == "Auth Level 1" ));
根据问这个问题的人(约翰),这对他来说并不是很有效,所以他最终这样做了:
var AuthUsers = from aspnet_User in db.aspnet_Users
join userinroles in db.aspnet_UsersInRoles on aspnet_User.UserId equals userinroles.UserId
where aspnet_User.Active
&& userinroles.aspnet_Role.RoleName == "Auth Level 1"
select aspnet_User;
希望其中一个能够奏效(请告诉我们哪个适合您)。
答案 1 :(得分:0)
为什么不使用会员提供商附带的内置功能?
答案 2 :(得分:0)
另一个选择是分两步执行此操作:
aspnet_UsersInRole
表aspnet_Users
表中过滤掉该列表中的用户类似的东西:
string roleName = "someRole";
// get the user id's in that role
var usersInRole = db.aspnet_UsersInRoles
.Where(ur => ur.RoleName == roleName)
.Select(ur => ur.UserId).ToList();
// then find the users that are in that list of users
var users = db.aspnet_Users.Where(u => usersInRole.Contains(u.UserId));
当然,在你的具体例子中,有一个带连接的直接方法会起作用 - 但有时候这几乎太难以表达,引入第二步可能会使事情变得更容易。您甚至可能希望根据其他一些标准进一步限制此用户列表,这些标准可能无法通过连接轻松表达。
不管怎么说 - 你绝对能够找出那些用户! : - )