c# - Controller Code to Loop Through Roles and Get First Letter of Role MVC 6 -
here userviewmodel:
public class userviewmodel { public string userid { get; set; } public string email { get; set; } public string roles { get; set; } } the line, "roles=roleprefixes(u.id)" red. have tried call darn function. in controller, how call roleprefixes(string id) function? "function" because don't know say.
private list<userviewmodel> getusers() { var usermanager = _serviceprovider.getrequiredservice<usermanager<applicationuser>>(); var rolemanager = _serviceprovider.getrequiredservice<rolemanager<identityrole>>(); var allroles = rolemanager.roles.tolist(); //var user = usermanager.findbyidasync(userid); //var usersroles = usermanager.getrolesasync(user); return context.users.select(u => new userviewmodel { email = u.email, userid = u.id, // works role ids not names::: roles = string.join("/", u.roles.select(r => r.roleid.first())) roles = roleprefixes(u.id) //this underlined in red. }).tolist(); } public async task<string> roleprefixes(string id) { var usermanager = _serviceprovider.getrequiredservice<usermanager<applicationuser>>(); //var rolemanager = _serviceprovider.getrequiredservice<rolemanager<identityrole>>(); //var allroles = rolemanager.roles.tolist(); var user = await usermanager.findbyidasync(id); var usersroles = await usermanager.getrolesasync(user); string strprefixes = ""; foreach (var item in usersroles) { strprefixes += item + "/"; } return strprefixes; }
project role name, select first character string, , join them together.
return context.users.select(u => new userviewmodel { email = u.email, userid = u.id, roles = string.join("/", context.roles.where(r => r.users.any(u2 => u2.userid == u.id)).select(r => r.name.first())) }).tolist();
Comments
Post a Comment