2012-01-10 11 views
15

Ho questo codice che mi fornisce un elenco di tutti gli utenti utilizzando il mio provider di appartenenza.Utilizzo di Linq su MembershipUserCollection

 var users = Membership.GetAllUsers(); 
     var usernames = new List<string>(); 
     foreach(MembershipUser m in users) 
      usernames.Add(m.UserName); 

ho pensato che ci dovrebbe essere un modo più semplice per fare questo utilizzando LINQ, ma io non riesco a usare LINQ su un MembershipUserCollection

risposta

31

Perché MembershipUserCollection implementa solo IEnumerable, non IEnumerable<MembershipUser>, è necessario utilizzare il metodo di estensione LINQ Cast quindi utilizzare altri metodi di estensione Linq:

Membership.GetAllUsers().Cast<MembershipUser>().Select (m => m.UserName); 
+0

Ho ricevuto il messaggio "Tempo di valutazione" durante l'ordinamento di 30.000 record –

3

si dovrebbe essere in grado di usare LINQ, se si utilizza il metodo Cast<T>() su di esso prima.

Ti piace questa:

var usernames = Membership.GetAllUsers().Cast<MembershipUser>().Select(x => x.UserName).ToList(); 
1

Ho usato questo pezzo di codice per creare un elenco generico di membri:

List<Member> memberList = new List<Member>(); 
foreach (MembershipUser membershipUser in members) 
{ 
    int id = Convert.ToInt32(membershipUser.ProviderUserKey); 
    memberList.Add(new Member(id)); 
} 
2

Generalmente un'alternativa a cast esplicito è quello di utilizzare

OfType<MembershipUser> 

quindi hai

var userList = Membership.GetAllUsers().OfType<MembershipUser>().ToList(); 
Problemi correlati