如何在创建新角色提供程序时停止此错误?

时间:2015-01-27 15:04:07

标签: c# asp.net-mvc entity-framework

我正在尝试将新的角色提供程序添加到我的MVC5项目中 - 但是在“returns 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[] { }; ;
     }

有人可以建议我如何纠正这个问题吗?

2 个答案:

答案 0 :(得分:2)

您将返回一组角色,而不是角色名称。选择名称并将它们作为数组返回。

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[] { }; ;
 }

答案 1 :(得分:1)

代码中的问题如下:

roles.ToArray();

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

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

我不确定您的类是否具有名为RoleName的属性,但一般而言,您应该按照字符串序列投影查询结果。然后调用ToArray将创建一个字符串数组,您将完成更多工作。