So, I searched Google and SO. He feels that this question has been asked many times, but the answer did not help me, but I feel that I am getting closer. However, I am new to LINQ and Lambda, and I don't have the knowledge to do what I want.
Desired Result
User Roles
-----------------------------------------
John Admin
Jane Staff, HR, Payroll
MyCoolUserName User
I am pretty close to this post and this post . Here is what I got so far.
ViewModel:
public class UsersViewModel {
[Display(Name = "User")]
public ApplicationUser User { get; set; }
[Display(Name = "Roles")]
public string Roles { get; set; }
}
Controller:
Trial No. 1
This solution returns spaces for roles, and I had to add this to my file web.config:<roleManager enabled="true" />
public class UsersController : Controller {
public async Task Index() {
var allUsers = await db.Users.ToListAsync();
var users = new List();
foreach (var user in allUsers) {
String[] roles = Roles.GetRolesForUser(user.UserName);
users.Add(new UsersViewModel {User = u, Roles = String.Join(",", roles.ToArray())});
}
return View(users);
}
}
Trial No. 2
This solution returns one row for each user per role, but only returns RoleId
public class UsersController : Controller {
public async Task Index() {
var allUsers = await db.Users.ToListAsync();
var users = allUsers.Select(u => new UsersViewModel {User = u, Roles = String.Join(",", u.Roles.Select(r => r.RoleId))}).ToList();
return View(users);
}
}
Here is what I get for Trial # 2 when I change RoleIdto RoleName:

, №2 u.Roles UserRoles. , , , Roles .
, - ? .