我正在使用linq to SQL以及asp.net成員資格提供程序。我設置了三個角色,但只想獲取特定角色的用戶。這是我的查詢返回所有用戶Linq to SQL,僅返回特定角色的用戶
public IQueryable<aspnet_User> GetAllMembers()
{
return db.aspnet_Users.OrderByDescending(u => u.UserName);
}
任何人都可以指向正確的方向嗎?
謝謝
我正在使用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