Oto wersja LINQ, zwraca MembershipUserCollection
podobnie jak podobnymi metodami członków (FindUsersByEmail
, FindUsersByName
). To nie jest bardzo ładny, ponieważ opiera się na efekt uboczny 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;
}
Alternatywnie, jeśli lista MembershipUser zrobi:
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;
}
i wreszcie jeśli wystarczy nazwy użytkowników można pominąć jednego 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;
}
Napisanie w zapisanym proc. Zajęłoby około 10 sekund. –