2009-08-19 59 views
0

我正在創建一個利用.Net Membership類的用戶審批界面。我有一個頁面,做一個Membership.GetAllUsers(),我吐出結果到一個數據網格。我通過MembershipUser.IsApproved篩選它們。尋找MemberShip.GetAllUsers(startDate,endDate)功能

我的問題是由於我在GetAllUsers()時打的慢。

因爲我不需要拉下所有的用戶,而是說所有的用戶都在一定範圍內的CreateDate,我想知道是否有辦法根據日期範圍?

想更新對於那些在類似的情況:


UPDATE: 所以,我結束了實際上不使用下面的答案。雖然,它並妥善解決的具體問題。無論如何,我真正的問題是,抓取用戶的一個子集(即那些需要「批准」 - 因爲我的管理員控制這個(不是用戶))。我的解決方案是分配新的signedup用戶以「等待批准」角色,然後我可以抓住Roles.UsersInRole(「awaitingapproval」),將這些顯示給管理員,以便「批准」用戶。然後,將每個經批准的用戶從「正在等待批准」中刪除並分配給新角色。

回答

1

儘管GetAllUsers()根據索引(即一次一個用戶的一個「頁面」)返回一部分用戶的重載,但沒有什麼可以用來將其基於這樣的定製邏輯。

我可能會寫一個繼承基礎成員資格提供程序的新類,併爲GetAllUsers()添加一個新的重載。

您可以使用Reflector來查看System.Web.Security.SqlMembershipProvider實現GetAllUsers()的源代碼作爲起點。

+0

有沒有可能把這個在我的utils的類,或者需要成爲自己的班級? – madcolor 2009-08-20 20:14:32

0

我寧願說你可以使用Linq來查詢值,但當我嘗試它時,我得到一個錯誤。

 
users.AsQueryable() 
-->Exception : source is not source is not IEnumerable 

而不是使用這個你可以通過你給作成日期時間寫一個存儲過程,而得到所有用戶的數據庫,並從該結果去了的。
- >有哪個成員在SQL數據庫自動生成,只需要修改aspnet_Membership_GetAllUsers存儲過程由你給出的參數

SELECT u.UserName, m.Email, m.PasswordQuestion, m.Comment, m.IsApproved, 
     m.CreateDate, 
     m.LastLoginDate, 
     u.LastActivityDate, 
     m.LastPasswordChangedDate, 
     u.UserId, m.IsLockedOut, 
     m.LastLockoutDate 
FROM dbo.aspnet_Membership m, dbo.aspnet_Users u, #PageIndexForUsers p 
WHERE u.UserId = p.UserId AND u.UserId = m.UserId AND 
     p.IndexId >= @PageLowerBound AND p.IndexId <= @PageUpperBound AND 
     m.CreateDate BETWEEN @pFirstDate AND @pSecondDate //Additional 

ORDER BY u.UserName 
+0

絕對是一個解決方案(我考慮過一個解決方案),但我認爲這將是更多的面向對象,並符合我的模式去與[womp]。 – madcolor 2009-08-20 13:29:30

相關問題