创建新的角色提供者时如何停止此错误?

How do I stop this error when creating a new Role Provider?

我正在尝试将一个新的角色提供者添加到我的 MVC5 项目中 - 但是在 "return roles.ToArray();" 行我收到错误:

Cannot implicitly convert type 'wb.Models.UserRole[]' to 'string[]'

    public override string[] GetRolesForUser(string username)
    {
        var roles = db.UserRole
                    .Where(x => x.UserName
                    .Equals(username, StringComparison.CurrentCultureIgnoreCase));

        if (roles != null)
                return roles.ToArray();
            else
               return new string[] { }; ;
     }

谁能建议我如何更正这个问题?

您正在 return 一组角色,而不是角色名称。 Select 输出名称并将它们 return 作为一个数组。

public override string[] GetRolesForUser(string username)
{
    var roleNames = 
        db.UserRole
            .Where(x => x.UserName.Equals(username, 
                StringComparison.CurrentCultureIgnoreCase))
            .Select(x => x.RoleName);

    if (roleNames.Count() > 0)
        return roleNames.ToArray();
    else
        return new string[] { }; ;
 }

您的代码中的问题在以下行中:

roles.ToArray();

这个 returns 一个 wb.Models.UserRole 的数组而不是一个 string[] 的字符串数组。我看到的一个选项是,在调用 ToArray() 到 select 一个带有一个字符串 属性 的匿名类型之前,它将包含您想要的信息。像这样:

 var roles = db.UserRole
               .Where(x => x.UserName
               .Equals(username, StringComparison.CurrentCultureIgnoreCase))
               .Select(x => x.RoleName);

我不确定您的 class 是否有一个名为 RoleName 的 属性,但一般来说,您应该像上面那样将查询结果投射到字符串序列中.然后调用 ToArray 将创建一个字符串数组,您将完成更多工作。