寻找MemberShip.GetAllUsers(startDate,endDate)功能

时间:2009-08-19 20:47:38

标签: .net asp.net-membership membership

我正在创建一个利用.Net Membership类的用户批准界面。我有一个页面,它执行Membership.GetAllUsers(),我将结果吐出到数据网格。我通过MembershipUser.IsApproved过滤它们。

我的问题是由于我在GetAllUsers()时遇到的缓慢。

由于我不需要关闭所有用户,而是说所有具有CreateDate的用户都在一定范围内,我想知道是否有办法根据日期获取子集-range?

想要在类似情况下更新:


更新 所以,我最终没有使用下面的答案。虽然,它确实正确地解决了具体问题。无论如何,我真正的问题是,抓住一部分用户(即那些需要“批准”的用户 - 因为我的管理员控制了这个(不是用户))。我的解决方案是将新的signedup用户分配给“等待批准”角色,然后我能够获取Roles.UsersInRole(“awaitingapproval”),向管理员显示那些能够“批准”用户的用户。然后,每个获得批准的用户将从“等待批准”中删除并分配给新角色。

2 个答案:

答案 0 :(得分:1)

虽然GetAllUsers()有一些重载基于索引返回一个用户子集(即一次只有一个“页面”用户),但是没有什么可以用来基于这样的自定义逻辑。 / p>

我可能会写一个继承基本成员资格提供程序的新类,并为GetAllUsers()添加一个新的重载。

您可以使用Reflector查看System.Web.Security.SqlMembershipProvider的GetAllUsers()实现的源代码作为起点。

答案 1 :(得分: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