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;
希望其中一个将工作(请让我们知道哪些适合您)。
答
另一种选择是在两个步骤都做这个操作:
- 首先通过查询表
- 然后从
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));
当然,在你的具体例子中,有一个加入的直接方法是可行的 - 但有时候这只是难以表达,而引入第二步可能会让事情变得更容易。您甚至可能希望根据其他一些标准进一步限制该用户列表,这些标准可能不易用联接表示。
这样或那样的 - 你一定能弄清楚那些用户! :-)
我去了第二个解决方案。感谢人们,当我有更多的时间我会去看看内置的功能。 – Dooie 2009-12-30 10:38:59