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

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

问题描述:

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

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

任何人都可以指向正确的方向吗?

谢谢

它看起来像你需要讨论here同样的事情。 Tvanfosson的未经检验的答案是在upvoted最:

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; 

希望其中一个将工作(请让我们知道哪些适合您)。

+0

我去了第二个解决方案。感谢人们,当我有更多的时间我会去看看内置的功能。 – Dooie 2009-12-30 10:38:59

为什么不使用与会员供应商一起提供的内置功能?

Have a look here...

另一种选择是在两个步骤都做这个操作:

  1. 首先通过查询表
  2. 然后从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)); 

当然,在你的具体例子中,有一个加入的直接方法是可行的 - 但有时候这只是难以表达,而引入第二步可能会让事情变得更容易。您甚至可能希望根据其他一些标准进一步限制该用户列表,这些标准可能不易用联接表示。

这样或那样的 - 你一定能弄清楚那些用户! :-)