asp.net c#成员身份:如何执行GetUsersInRoles(多个角色)H

asp.net c#成员身份:如何执行GetUsersInRoles(多个角色)H,c#,asp.net,linq,membership,roles,C#,Asp.net,Linq,Membership,Roles,我想做一个“GetUsersInRoles”,也就是说,我想找到所有MembershipUser在一组角色中至少有一个角色,但我似乎无法理解这一点 我有GetUsersInRole,Membership.GetAllUsers(),Linq,。。。但是怎么做呢 非常感谢您的反馈 Tommy没有GetUsersInRole这样的方法,但您必须使用GetUsersInRole并循环使用所需的角色 有点复杂,但这里有一种方法: string[] roles = {"role1", "role2" };

我想做一个“GetUsersInRoles”,也就是说,我想找到所有MembershipUser在一组角色中至少有一个角色,但我似乎无法理解这一点

我有GetUsersInRole,Membership.GetAllUsers(),Linq,。。。但是怎么做呢

非常感谢您的反馈


Tommy

没有GetUsersInRole这样的方法,但您必须使用GetUsersInRole并循环使用所需的角色

有点复杂,但这里有一种方法:

string[] roles = {"role1", "role2" };
        string[] tempusers = new string[]{};
        List<string> users = new List<string>();
        foreach (string role in roles)
        {
            string[] usersInRole = Roles.GetUsersInRole(role);
            users =  tempusers.Union(usersInRole).ToList();
            tempusers = users.ToArray();
        }
        foreach (string user in users) { Response.Write(user + "<br/>"); }
string[]角色={“role1”,“role2”};
字符串[]tempusers=新字符串[]{};
列表用户=新列表();
foreach(角色中的字符串角色)
{
字符串[]usersInRole=Roles.GetUsersInRole(角色);
users=tempusers.Union(usersInRole.ToList();
tempusers=users.ToArray();
}
foreach(用户中的字符串用户){Response.Write(用户+“
”);}
实际上,ASP.Net成员资格提供程序似乎是建立在将用户绑定到单个角色的思想之上的。然而,我们在所从事的项目中也有类似的设置。这有点尴尬,但尝试一下这样对我们有用的东西:

 List<string> roleset_to_find = new List<string>() {"RoleA","RoleB"};

 List<string> membersFound = new List<string>();

 foreach (string role in roleset_to_find)
 {
      membersFound.AddRange(Roles.GetUsersInRole(role));
 }
List roleset_to_find=new List(){“RoleA”,“RoleB”};
List membersFound=新列表();
foreach(角色集中的字符串角色要查找)
{
membersFound.AddRange(Roles.GetUsersInRole(role));
}

这是一个Linq版本,它返回一个
MembershipUserCollection
就像类似的成员身份方法一样(
FindUserByEmail
FindUserByName
)。它不是很漂亮,因为它依赖于ForEach副作用:

    public static MembershipUserCollection FindUsersByRole(string[] roles)
    {
        MembershipUserCollection msc = new MembershipUserCollection();

        roles.Select(role => Roles.GetUsersInRole(role))
        .Aggregate((a, b) => a.Union(b).ToArray())
        .Distinct()
        .Select( user => Membership.GetUser(user))
        .ToList().ForEach( user => msc.Add(user));

        return msc;
    }
或者,如果成员资格用户列表将执行以下操作:

    public static List<MembershipUser> FindUsersByRole(string[] roles)
    {
        var userList = roles.Select(role => Roles.GetUsersInRole(role))
                            .Aggregate((a, b) => a.Union(b).ToArray())
                            .Distinct()
                            .Select( user => Membership.GetUser(user))
                            .ToList();
        return userList;
    }  
公共静态列表FindUserByRole(字符串[]角色)
{
var userList=roles.Select(role=>roles.GetUsersInRole(role))
.Aggregate((a,b)=>a.Union(b).ToArray()
.Distinct()
.Select(用户=>Membership.GetUser(用户))
.ToList();
返回用户列表;
}  
最后,如果您只需要用户名,可以跳过其中一个选项:

    public static List<string> FindUsersByRole(string[] roles)
    {
        var userList = roles.Select(role => Roles.GetUsersInRole(role))
                            .Aggregate((a, b) => a.Union(b).ToArray())
                            .Distinct()
                            .ToList();
        return userList;
    }
公共静态列表FindUserByRole(字符串[]角色)
{
var userList=roles.Select(role=>roles.GetUsersInRole(role))
.Aggregate((a,b)=>a.Union(b).ToArray()
.Distinct()
.ToList();
返回用户列表;
}

Right-这就是我正在寻找的一种很好的方法,最好是使用LINQT。在存储过程中写入此文件大约需要10秒。非常感谢您的回复和快速回答。不幸的是,我不能添加“有用性”积分,因为我自己缺乏声誉积分。