2012-01-10 11 views
15

Tengo este código que me da una lista de todos los usuarios mediante el uso de mi proveedor de membresía.Uso de Linq en MembershipUserCollection

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

pensé que debe haber una manera más fácil de hacer esto mediante el uso de LINQ, pero me parece que no puede utilizar LINQ en un MembershipUserCollection

Respuesta

31

Debido a que sólo se implementa MembershipUserCollection IEnumerable, no IEnumerable<MembershipUser>, es necesario utilizar el método de extensión LINQ Cast continuación, a continuación, utilizar otros métodos de extensión LINQ:

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

Recibí el mensaje "Tiempo de espera de evaluación" al ordenar 30,000 registros –

3

usted debería ser capaz de utilizar LINQ, si se utiliza el método Cast<T>() en ella en primer lugar.

De esta manera:

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

He utilizado este pedazo de código para crear una lista genérica de miembros:

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

general una alternativa a la conversión explícita es utilizar

OfType<MembershipUser> 

para que tenga

var userList = Membership.GetAllUsers().OfType<MembershipUser>().ToList(); 
Cuestiones relacionadas