从MembershipUserCollection获取单个MembershipUser

时间:2012-05-19 04:51:47

标签: c# asp.net asp.net-membership

我正在通过编写示例应用程序来学习ASP.Net MVC3 EF4。我正在使用标准的会员提供商。我在成员资格提供程序中有requiresUniqueEmail =“true”,因此每个MembershipUser只有不超过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);

2 个答案:

答案 0 :(得分:3)

因为您为每个用户提供了唯一的电子邮件,为什么使用MembershipUserCollection

而不是你可以直接使用

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

    MembershipUser oMu = Membership.GetUser(userName); 

oMu对象会为您提供已通过GetUserNameByEmail(model.Email)

传递的电子邮件地址的用户的所有属性

基于有问题的更新进行编辑

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

答案 1 :(得分:1)

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

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

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