C# 用于循环角色并获取角色MVC6的第一个字母的控制器代码

C# 用于循环角色并获取角色MVC6的第一个字母的控制器代码,c#,function,asp.net-mvc-5,asp.net-identity-2,C#,Function,Asp.net Mvc 5,Asp.net Identity 2,以下是我的UserViewModel: public class UserViewModel { public string UserId { get; set; } public string Email { get; set; } public string Roles { get; set; } } 行“Roles=RolePrefixes(u.Id)”为红色。我已经尽了一切努力来简单地调用这个该死的函数。 在我的控制器中,如何调用RolePrefixes(字符串

以下是我的UserViewModel:

public class UserViewModel
{
    public string UserId { get; set; }
    public string Email { get; set; }
    public string Roles { get; set; }
}
行“Roles=RolePrefixes(u.Id)”为红色。我已经尽了一切努力来简单地调用这个该死的函数。 在我的控制器中,如何调用RolePrefixes(字符串id)函数?我说“函数”是因为我不知道该说什么

  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,

           // THIS WORKS FOR Role Ids but not their Names::: Roles = String.Join("/", u.Roles.Select(r => r.RoleId.First()))


           Roles = RolePrefixes(u.Id) //THIS IS 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;

    }
private List GetUsers()
{
var UserManager=\u serviceProvider.GetRequiredService();
var rolemager=_serviceProvider.GetRequiredService();
var allRoles=rolemager.Roles.ToList();
//var user=UserManager.FindByIdAsync(userID);
//var usersRoles=UserManager.GetRolesAsync(用户);
返回context.Users.Select(u=>newuserviewmodel
{
电子邮件=美国电子邮件,
UserId=u.Id,
//这适用于角色ID,但不适用于其名称:::Roles=String.Join(“/”,u.Roles.Select(r=>r.RoleId.First())
Roles=RolePrefixes(u.Id)//这用红色下划线表示。
}).ToList();
}
公共异步任务角色引用(字符串id)
{
var UserManager=\u serviceProvider.GetRequiredService();
//var rolemager=_serviceProvider.GetRequiredService();
//var allRoles=rolemager.Roles.ToList();
var user=await UserManager.FindByIdAsync(id);
var usersRoles=await UserManager.GetRolesAsync(用户);
字符串strPrefixes=“”;
foreach(usersRoles中的var项)
{
strPrefixes+=项目+“/”;
}
返回strPrefixes;
}

投影角色名称,从字符串中选择第一个字符,并将它们全部连接在一起

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();

您是否尝试使用
Substring
方法?推到字符串列表,然后调用
String.Join(“/”,theListOfStringYouHave)
?我似乎无法推送作为特定用户角色名称的“字符串列表”。我甚至无法获得该用户的角色。它看起来确实不错,但r.Name用红色下划线,它说“IdentityUserRole”不包含“Name”一词的定义。如果我输入“r”,下拉列表只显示用户ID和角色ID供选择。如果它能工作,我可以接受它,但是我也不会学习如何调用函数。我已经将它修复为使用默认版本的IdentityTank you Shoe,因为我坚持使用它。但是,“u.Id”下面有红色下划线,上面写着:“argument1:无法从'string'转换为'MVC6.Models.ApplicationUser'”。粘贴角色的新行代码会在“.Select”()和“r.First()”下创建红线。我在控制器顶部有“using System.Linq;”,返回语句使用“context.Users.Select(u)”。快疯了。这应该比实际情况更简单。尝试一个稍微不同的方向…
\u context.Roles.Where(r=>r.Users.Any(u2=>u2.UserId==u.Id))。选择(r=>r.Name.First())
…我个人正在等待MVC6的几个版本从MVC5切换过来。这通常是解决烦恼的时候。