Ecco una versione Linq, restituisce un MembershipUserCollection
proprio come i simili metodi Membership (FindUsersByEmail
, FindUsersByName
). Non è molto bello dato che si basa sul effetto collaterale PerOgni:
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;
}
In alternativa, se un elenco di MembershipUser farà:
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;
}
E infine se avete solo bisogno i nomi utente si può saltare una select :
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;
}
Questo avrebbe richiesto circa 10 secondi per scrivere in un processo memorizzato. –