1

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

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

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

由于我有独特的电子邮件,我如何从 MembershipUserCollection 中获取 MembershipUser?我知道我可以做一个 foreach 循环:

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

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

这不起作用: MembershipUser user = users[0];

但这正是我正在寻找的。

谢谢!!

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

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

2 回答 2

3

因为每个用户都有唯一的电子邮件,为什么要使用MembershipUserCollectionClass

相反,您可以直接使用

    string userName = Membership.GetUserNameByEmail(model.Email);

    MembershipUser oMu = Membership.GetUser(userName); 

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

根据相关更新进行编辑

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

于 2012-05-19T04:56:54.023 回答
1

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

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

MembershipUser(如果您碰巧使用一个,您也可以转换为您的自定义子类)。

于 2012-05-19T04:54:27.423 回答