Использование Linq в MemberhipUserCollection

У меня есть этот код, который дает мне список всех пользователей, используя мой членский провайдер.

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

Я думал, что должен быть более простой способ сделать это, используя LINQ, но я не могу использовать LINQ для MemberhipUserCollection

Ответы

Ответ 1

Поскольку MembershipUserCollection реализует только IEnumerable, а не IEnumerable<MembershipUser>, вам нужно использовать метод расширения Linq Cast, а затем использовать другое расширение Linq методы:

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

Ответ 2

Вы можете использовать LINQ, если сначала используете метод Cast<T>().

Вот так:

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

Ответ 3

В общем случае альтернативой явному кастингу является использование

OfType<MembershipUser>

поэтому у вас есть

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

Ответ 4

Я использовал этот фрагмент кода для создания общего списка членов:

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