2012-01-10 13 views
15

Mam ten kod, który daje mi listę wszystkich użytkowników, korzystając z mojego dostawcy członkostwa.Używanie Linq na MembershipUserCollection

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

myślałem nie powinno być łatwiejszy sposób to zrobić przy użyciu LINQ, ale nie wydaje się używać LINQ na MembershipUserCollection

Odpowiedz

31

Ponieważ MembershipUserCollection realizuje tylko IEnumerable, nie IEnumerable<MembershipUser>, trzeba używać LINQ metodę rozszerzenia Cast następnie następnie użyć innych metod przedłużających Linq:

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

Podczas sortowania 30 000 rekordów pojawił się komunikat "Czas oceny" –

3

Powinieneś móc używać LINQ, jeśli używasz metody Cast<T>() na nim w pierwszej kolejności.

Jak to:

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

Kiedyś ten kawałek kodu, aby stworzyć ogólną listę członków:

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

Ogólnie alternatywą dla wyraźnego odlewania jest użycie

OfType<MembershipUser> 

, więc masz

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