Reputation: 898
I'm trying to build up a multiselect of admin users to toggle between assigned or unassigned. All seems to be correct except it doesn't like where I'm attempting to assign true or false to the IsInRole
property of the UsersInRoleViewModel
.
The error is:
Operator '==' cannot be applied to operands of type 'string' and 'System.Linq.IQueryable'
Any assistance is appreciated!
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);
}
Upvotes: 0
Views: 1348
Reputation: 101
Try use string.CompareOrdinal
string.CompareOrdinal("A","B")
-1
string.CompareOrdinal("B","A")
1
string.CompareOrdinal("A","A")
0
Upvotes: 0
Reputation: 1247
In your case you are doing two trips to db, one trip to get Admin RoleId, and second to get users with AdminRole = Yes/Now
Here is the same query in just one trip to db instead of two in your case.
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 };
Upvotes: 1
Reputation: 327
Admin Id is a list of ids. You need to change it to
var adminId = db.Roles.Where(r => r.Name == "Administrator").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);
}
Upvotes: 0