MC, 14:56 niedziela, 17.03.2013 r.
Ilustracja do artykułu: Membership Provider - GetAllUsers() i używanie Linq na kolekcji MembershipUserCollection

Membership Provider - GetAllUsers() i używanie Linq na kolekcji MembershipUserCollection

Kolejna praktyczna wskazówka dotycząca współpracy z Membership Provider-em, a mówiąc konkretniej, używania metod Linq na kolekcji zwracanej przez GetAllUsers().

W czym problem?

Jak wiadomo, bądź chociaż nietrudno się domyślić po nazwie, metoda Membership.GetAllUsers() zwraca kolekcję wszystkich użytkowników. Wygodnie byłoby mieć możliwość zastosowania na niej selektorów Linq, jak jednak okaże się przy pierwszej próbie, rozszerzenia dostarczane przez Linq, nie obejmują tej kolekcji. Dlaczego tak się dzieje? Jeśli by nieco zgłębić temat, okaże się, że zwracana MembershipUserCollection jest implementacją interfejsu IEnumerable, zaś Linq wymaga w tej sytuacji IEnumerable<MembershipUser>, tak by móc pracować na obiekcie. No to znamy przyczynę, teraz jak to ugryźć?

Jak używać Linq z kolekcją MembershipUserCollection?

Na szczęście Linq pozwala zrzutować tę kolekcję na IEnumerable<MembershipUser> i służy do tego metoda Cast(). I to właściwie tyle. Przykładowa implementacja z zastosowaniem metody Cast(), pobierająca listę adresów email wszystkich użytkowników, może wyglądać następująco:
var emails = Membership.GetAllUsers()
.Cast<MembershipUser>()
.Select(user => user.Email);

Komentarze (0) - Nikt jeszcze nie komentował - bądź pierwszy!

Imię:
Treść: