我正在尝试建立管理员用户的多重选择,以在已分配或未分配之间切换。一切似乎都是正确的,只是它不喜欢我尝试将 true 或 false 分配给
IsInRole
的 UsersInRoleViewModel
属性。
错误是:
运算符“==”不能应用于“string”和“System.Linq.IQueryable”类型的操作数
如有任何帮助,我们将不胜感激!
public ActionResult EditRoles()
{
// AdminUsers
var adminId = db.Roles.Where(r => r.Name == "Administrator").Select(r => r.Id);
var users = db.Users.Select(u => new UsersInRoleViewModel
{
UserId = u.Id,
DisplayName = u.DisplayName,
IsInRole = u.Roles.Where(r => r.RoleId == adminId)
});
var adminUsers = users.Where(u => u.IsInRole).Select(n => n.UserId).ToArray();
var adminMultiSelect = new MultiSelectList(users, "Id", "DisplayName", adminUsers);
var model = new UserSelectListsViewModel { AdminUsers = adminMultiSelect, SelectedAdmins = adminUsers, DevUsers = null, PMUsers = null, SubUsers = null };
return View(model);
}
在您的情况下,您将进行两次数据库访问,一次访问获取 Admin RoleId,第二次访问具有 AdminRole = Yes/Now 的用户
在您的情况下,这是一次数据库访问中的相同查询,而不是两次。
var adminUsers = db.Roles.Where(r => r.Name == "Administrator")
.SelectMany(r => r.Users.Select(u => new UsersInRoleViewModel
{
UserId = u.Id,
DisplayName = u.DisplayName)).toList();
var users = db.Users.Select(u=> new UsersInRoleViewModel
{
UserId = u.Id,
DisplayName = u.DisplayName)).toList();
var adminMultiSelect = new MultiSelectList(users, "Id", "DisplayName", adminUsers);
var model = new UserSelectListsViewModel { AdminUsers = adminMultiSelect, SelectedAdmins = adminUsers, DevUsers = null, PMUsers = null, SubUsers = null };
Admin Id 是一个 id 列表。您需要将其更改为
var adminId = db.Roles.Where(r => r.Name == "管理员").Select(r => r.Id).First().ToString();
public ActionResult EditRoles()
{
//AdminUsers
var adminId = db.Roles.Where(r => r.Name == "Administrator").Select(r => r.Id).First().ToString();
var users = db.Users.Select(u => new UsersInRoleViewModel
{
UserId = u.Id,
DisplayName = u.DisplayName,
IsInRole = u.Roles.Where(r => adminId == r.RoleId))
});
var adminUsers = users.Where(u => u.IsInRole).Select(n => n.UserId).ToArray();
var adminMultiSelect = new MultiSelectList(users, "Id", "DisplayName", adminUsers);
var model = new UserSelectListsViewModel { AdminUsers = adminMultiSelect, SelectedAdmins = adminUsers, DevUsers = null, PMUsers = null, SubUsers = null };
return View(model);
}
尝试使用
string.CompareOrdinal
string.CompareOrdinal("A","B")
-1
string.CompareOrdinal("B","A")
1
string.CompareOrdinal("A","A")
0