我正在通过编写示例应用程序来学习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);
答案 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
子类。)