2012-05-19 66 views
1

我正在通過編寫示例應用程序來學習ASP.Net MVC3 EF4。我正在使用標準的會員供應商。我在Membership提供程序中擁有requireUniqueEmail =「true」,因此每個MembershipUser不超過1封電子郵件。從MembershipUserCollection獲取單個成員資格用戶

我想通過他們的電子郵件地址找到特定的用戶。還有一個功能,可以幫助:

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

因爲我有獨特的電子郵件,我如何才能從MembershipUserCollection中的MembershipUser?我知道我可以做一個foreach循環:

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

,但那裏只是訪問的第一行更快的方式嗎?

這是行不通的:MembershipUser user = users [0];

但這是我正在尋找的。

謝謝!

UPDATE:這工作,但我仍然有興趣在回答以上:

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

另請參閱http://stackoverflow.com/questions/15411951 –

回答

3

既然你爲什麼要使用MembershipUserCollection類爲每個用戶唯一的電子郵件

,而你可以直接使用

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

    MembershipUser oMu = Membership.GetUser(userName); 

oMu對象會給你的用戶的電子郵件地址的所有屬性得到它你已經通過GetUserNameByEmail(model.Email)

基於問題更新編輯

我認爲加載一個只有單一記錄的集合是無關緊要的,與字符串用戶名(在我的例子中使用的)相比,內存消耗會更多,另外你在查找單個記錄時遇到問題正在使用循環,不必要的延遲來獲取細節)。此外,代碼行減少(編譯代碼變得更容易和更快)。

+0

你有沒有試過這個.. ?? – Murtaza

1

嘗試使用First() LINQ的擴展方法如下:

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

(您也可以投到你的自定義MembershipUser子類,如果你碰巧使用一個)。

+0

這並不適用於我。 –

相關問題