16

I have this code which gives me a list of all the users by using my membership provider.

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

I thought there should be an easier way to do this by using LINQ, but I can't seem to use LINQ on a MembershipUserCollection

ek_ny
  • 10,153
  • 6
  • 47
  • 60

4 Answers4

33

Because MembershipUserCollection only implements IEnumerable, not IEnumerable<MembershipUser>, you need to use the Linq extension method Cast then then use other Linq extension methods:

Membership.GetAllUsers ().Cast<MembershipUser> ().Select (m => m.UserName);
Pete
  • 11,313
  • 4
  • 43
  • 54
3

You should be able to use LINQ, if you use the Cast<T>() method on it first.

Like this:

var usernames = Membership.GetAllUsers().Cast<MembershipUser>().Select(x => x.UserName).ToList();
Nuffin
  • 3,882
  • 18
  • 34
2

Generally an alternative to explicit casting is to use

OfType<MembershipUser>

so you have

var userList = Membership.GetAllUsers().OfType<MembershipUser>().ToList();
Kwame
  • 143
  • 1
  • 6
1

I used this piece of code to create a generic list of Members:

List<Member> memberList = new List<Member>();
foreach (MembershipUser membershipUser in members)
{
    int id = Convert.ToInt32(membershipUser.ProviderUserKey);
    memberList.Add(new Member(id));
}
mathijsuitmegen
  • 2,270
  • 1
  • 34
  • 36