从 MemberUserCollection 获取单个成员资格用户

本文关键字:用户 成员 单个 MemberUserCollection 获取 | 更新日期: 2023-09-27 18:34:51

我正在通过编写示例应用程序来学习 ASP.Net MVC3 EF4。 我使用的是标准成员资格提供程序。 我在会员资格提供程序中有requiresUniqueEmail="true",因此每个会员用户不超过1封电子邮件。

我想通过他们的电子邮件地址找到特定用户。 有一个功能可以帮助:

MembershipUserCollection users = Membership.FindUsersByEmail(model.Email);

由于我有唯一的电子邮件,如何从会员用户集合中获取会员用户? 我知道我可以做一个foreach循环:

foreach (MembershipUser user in users)
{
username = user.UserName;
}

但是有没有一种更快的方法来访问第一行?

这不起作用:会员用户用户 = 用户[0];

但这就是我正在寻找的。

谢谢!!

更新:这有效,但我仍然对上述问题的答案感兴趣:

string username1 = Membership.GetUserNameByEmail(model.Email);
MembershipUser user = Membership.GetUser(username1);

从 MemberUserCollection 获取单个成员资格用户

既然您为每个用户都有唯一的电子邮件,为什么使用MembershipUserCollection

相反,您可以直接使用

    string userName = Membership.GetUserNameByEmail(model.Email);
    MembershipUser oMu = Membership.GetUser(userName); 

oMu对象将为您提供用户的所有属性,其中包含您传入的电子邮件地址GetUserNameByEmail(model.Email)

根据有问题的更新进行编辑

我认为加载只有单个记录的集合无关紧要,与字符串用户名(在我的示例中使用(相比,内存消耗会更多,而且您在查找单个记录时遇到问题(您使用循环的地方,获取详细信息时不必要的延迟(。此外,代码行数也减少了(编译代码变得更加容易和快捷(。

尝试使用 First() Linq 扩展方法,如下所示:

using System.Linq;
...
var user = Membership.FindUsersByEmail(model.Email).Cast<MembershipUser>().First();

(如果您碰巧使用自定义MembershipUser子类,您也可以强制转换为子类(。