2009-12-30 15 views
3

我正在使用linq to SQL以及asp.net成員資格提供程序。我設置了三個角色,但只想獲取特定角色的用戶。這是我的查詢返回所有用戶Linq to SQL,僅返回特定角色的用戶

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

任何人都可以指向正確的方向嗎?

謝謝

回答

2

它看起來像你需要討論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

0

另一種選擇是在兩個步驟都做這個操作:

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

當然,在你的具體例子中,有一個加入的直接方法是可行的 - 但有時候這只是難以表達,而引入第二步可能會讓事情變得更容易。您甚至可能希望根據其他一些標準進一步限制該用戶列表,這些標準可能不易用聯接表示。

這樣或那樣的 - 你一定能弄清楚那些用戶! :-)