2009-08-19 57 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