在MembershipUserCollection上使用Linq

16

我有这段代码,它使用我的成员资格提供程序给我返回所有用户的列表。

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

我认为使用LINQ应该有更简单的方法来完成这个任务,但是我好像无法在MembershipUserCollection上使用LINQ。

4个回答

33

因为MembershipUserCollection只实现了IEnumerable而没有实现IEnumerable<MembershipUser>,所以你需要使用Linq扩展方法Cast,然后再使用其他Linq扩展方法:

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

当对30,000条记录进行排序时,我收到了“评估超时”的消息。 - NoName

3

如果您首先对其使用Cast<T>()方法,则应该能够使用LINQ。

像这样:

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

2
一般来说,替代显式转换的方法是使用。
OfType<MembershipUser>

所以你有

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

1
我使用了这段代码来创建一个通用的成员列表:
List<Member> memberList = new List<Member>();
foreach (MembershipUser membershipUser in members)
{
    int id = Convert.ToInt32(membershipUser.ProviderUserKey);
    memberList.Add(new Member(id));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接