有三个与角色相关的表。
UserId
数据RoleName
和RoleId
UserId
和RoleId
。但由于某些原因,我无法直接访问此表(如db.UserRoles
)。所以我想做的是避免列出管理员角色的用户。
我的代码是这样的:
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
答案 0 :(得分:0)
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"))
答案 1 :(得分:0)
试试这个:
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"
引起的,我认为RoleId
属于int
类型。更重要的是,表达式Where(e => e.Roles.Where(r => r.RoleId != "1"))
无效。传递到第一个Where
的表达式树应返回指定bool
的{{1}}(它是您上下文中的用户),但是您将返回与admin不同的角色集合(而不是提及{{1} })。