Вот версия Linq, она возвращает MembershipUserCollection
точно так же, как аналогичные методы членства (FindUsersByEmail
, FindUsersByName
). Это не очень красиво, так как оно опирается на побочный эффект 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;
}
В качестве альтернативы, если список MembershipUser будет делать:
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;
}
И, наконец, если вам просто нужны имена пользователей, вы можете пропустить один из них:
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;
}