Linq to SQL,仅返回特定角色的用户

时间:2009-12-30 10:00:39

标签: asp.net linq-to-sql membership

我正在使用linq to SQL和asp.net成员资格提供程序。我设置了三个角色,但只想获得特定角色的用户。这是我返回所有用户的查询

  public IQueryable<aspnet_User> GetAllMembers()
  {
     return db.aspnet_Users.OrderByDescending(u => u.UserName);
  }

有人能指出我正确的方向吗?

由于

3 个答案:

答案 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)

为什么不使用会员提供商附带的内置功能?

Have a look here...

答案 2 :(得分:0)

另一个选择是分两步执行此操作:

  1. 首先通过查询aspnet_UsersInRole
  2. 找到您角色中的用户列表
  3. 然后从aspnet_Users表中过滤掉该列表中的用户
  4. 类似的东西:

    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));
    

    当然,在你的具体例子中,有一个带连接的直接方法会起作用 - 但有时候这几乎太难以表达,引入第二步可能会使事情变得更容易。您甚至可能希望根据其他一些标准进一步限制此用户列表,这些标准可能无法通过连接轻松表达。

    不管怎么说 - 你绝对能够找出那些用户! : - )