2014-04-03 66 views
1

我想根據他們的角色過濾註冊用戶列表。我設法做到這一點,以便它顯示某個角色的用戶,但我想實現的是完全相反的,並且只顯示在該用戶組中而不是的用戶過濾器用戶列表asp.net標識

這是我擁有的代碼:

var users = UserManager.Users.ToListAsync(); 

var roleUsers = RoleManager.Roles.Single(a => a.Name.Equals("Super Admin")).Users; 

var list = (from r in roleUsers 
      join u in users on r.UserId equals u.Id 
      select u); 

更新

感謝@sjkm我已經能夠過濾掉與此

var users = UserManager.Users.ToList(); 

var roles = RoleManager.Roles.Where(a => a.Name != "Super Admin").ToList(); 

var userList = new List<IdentityUserRole>(); 

foreach (var role in roles) 
{ 
    userList.AddRange(role.Users.ToList()); 
} 

var list = (from r in userList 
      join u in users on r.UserId equals u.Id 
      select u).Distinct(); 

return View(list); 
超級管理員現在

我的問題是誰既是一個超級管理員和另一個角色,在此列表中顯示,所以我現在需要進一步篩選此列表,刪除任何超級管理員誰可能在另一個角色

我用戶還忘了提,這是使用asp.net身份2

回答

1

超級管理員誰有次要角色,真的很簡單,只是克等超級管理員的用戶ID的列表,並從非超級管理員用戶的列表中刪除,找到並刪除那些次要角色

var users = UserManager.Users.ToList(); 

var roles = RoleManager.Roles.Where(a => a.Name != "Super Admin").ToList(); 

var superAdmins = RoleManager.Roles.Single(b => b.Name == "Super Admin").Users; 

var userList = new List<IdentityUserRole>(); 

foreach (var role in roles) 
{ 
    userList.AddRange(role.Users.ToList()); 
} 

foreach (var superAdmin in superAdmins) 
{ 
    userList.RemoveAll(x => x.UserId == superAdmin.UserId); 
} 

var list = (from r in userList 
      join u in users on r.UserId equals u.Id 
      orderby u.FirstName ascending 
      orderby u.LastName ascending 
      select u).Distinct(); 

return View(list); 

毫無疑問,這是做一個真正的垃圾和低效的方式但它仍然做的工作,但如果任何人都可以簡化它,那麼請成爲我的客人

希望這將有一些用於其他人在那裏!

更新

管理人剛剛起步的用戶列表,並刪除簡化這一那些用戶ID匹配那些誰出現在超級管理員用戶列表

var users = UserManager.Users.ToList(); 
var superAdmins = RoleManager.Roles.Single(b => b.Name == "Super Admin").Users; 

foreach (var superAdmin in superAdmins) 
{ 
    users.RemoveAll(c => c.Id == superAdmin.UserId); 
} 

return View(users.ToList()); 
1
var roles = RoleManager.Roles.Where(r => r.Name != "Super Admin").ToList(); 

var users = new List<User>(); 

foreach(var role in roles) { 
    users.AddRange(role.Users.ToList()); 
} 

// 'users'-List contains all the users which do not have the 'Super Admin' role 

(爲了更好的性能比較得到角色的所有ID和一個單個查詢Users.Where(u => rolesIds.Contains(u.Role_IDFS))選擇用戶)我已經成功地過濾

+1

有錯誤出現,當我嘗試構建**「錯誤'System.Linq.IQueryable '不包含'Users'的定義,也沒有擴展方法'Users'接受類型' System.Linq.IQueryable '(你是否缺少使用指令或程序集引用?)「** –

+1

你應該提到你使用實體框架。我更新了代碼,現在就試試。 – sjkm

+0

仍然不能得到它的工作,現在得到這個錯誤**「最好的重載方法匹配'System.Collections.Generic.List .AddRange(System.Collections.Generic.IEnumerable )'有一些無效參數「**,然後是**」參數1:無法從'System.Collections.Generic.List '轉換爲'System.Collections .Generic.IEnumerable 「** –