Asp.Net MVC 5 Identity如何不列出具有Admin角色的用户

本文关键字:Admin 角色 用户 何不列 MVC Net Identity Asp | 更新日期: 2023-09-27 18:14:31

有三个与角色相关的表。

  1. AspNetUsers -保留UserId数据
  2. AspNetRoles—保留RoleNameRoleId
  3. AspNetUserRoles -通过AspNetUsers和aspnettrolles建立关系。它只有两个列,UserIdRoleId。但是由于某种原因,我不能直接访问这个表(像db.UserRoles)。

所以我要做的是避免列出Admin角色的用户。

我的代码是这样的:
return View(db.Users.OrderBy(e => e.UserName)
                    .ToPagedList(pageNumber, pageSize));

我想我应该写这样的东西但是当我这样做的时候我总是会出错

return View(db.Users.Where(e => e.Roles.Where(r => r.RoleId != "1"))
                    .OrderBy(e => e.UserName)
                    .ToPagedList(pageNumber, pageSize));
                     // suppose that the RoleId of Admin is 1

Asp.Net MVC 5 Identity如何不列出具有Admin角色的用户

return View(db.Users.Where(e => e.Roles.All(r => r.RoleId != "1"))
                  .OrderBy(e => e.UserName).ToPagedList(pageNumber, pageSize)); 
                    // Suppowse that the RoleId of Admin is 1

使用.All扩展名

db.Users.Where(u=>!u.Roles.Any(r=>r.RoleId == "1"))

试试这个:

const int adminRoleId = 1;
var query = db.Users.Where(user => !user.Roles
                                        .Any(role => role.Id 
                                                        == adminRoleId));
return View(query.OrderBy(e => e.UserName)
                 .ToPagedList(pageNumber, pageSize));

我认为在你的情况下,问题是由r.RoleId != "1"引起的,我认为RoleIdint类型。而且,表达式Where(e => e.Roles.Where(r => r.RoleId != "1"))是无效的。传递到第一个Where的表达式树应该为指定的r返回bool(在您的上下文中是用户),但是您返回的是与admin不同的角色集合(而不是提到的bool)。