0

我在我的 web 应用程序中使用了 ASP.NET 成员资格,并且我使用 GetAllUsers 方法来列出用户,但是此方法返回按用户名排序的列表我想通过 CrateDate 订购它我为我的 sql 中的存储过程提供资金,但我不知道如何修改或编辑它:(这是我的 GetAllUsers 存储过程的代码:

    USE [MoftakiDB]
GO
/****** Object:  StoredProcedure [dbo].[aspnet_Membership_GetAllUsers]    Script Date: 04/26/2012 14:24:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER PROCEDURE [dbo].[aspnet_Membership_GetAllUsers]
    @ApplicationName       nvarchar(256),
    @PageIndex             int,
    @PageSize              int
AS
BEGIN
    DECLARE @ApplicationId uniqueidentifier
    SELECT  @ApplicationId = NULL
    SELECT  @ApplicationId = ApplicationId FROM dbo.aspnet_Applications WHERE LOWER(@ApplicationName) = LoweredApplicationName
    IF (@ApplicationId IS NULL)
        RETURN 0


    -- Set the page bounds
    DECLARE @PageLowerBound int
    DECLARE @PageUpperBound int
    DECLARE @TotalRecords   int
    SET @PageLowerBound = @PageSize * @PageIndex
    SET @PageUpperBound = @PageSize - 1 + @PageLowerBound

    -- Create a temp table TO store the select results
    CREATE TABLE #PageIndexForUsers
    (
        IndexId int IDENTITY (0, 1) NOT NULL,
        UserId uniqueidentifier
    )

    -- Insert into our temp table
    INSERT INTO #PageIndexForUsers (UserId)
    SELECT u.UserId
    FROM   dbo.aspnet_Membership m, dbo.aspnet_Users u
    WHERE  u.ApplicationId = @ApplicationId AND u.UserId = m.UserId
    ORDER BY u.UserName

    SELECT @TotalRecords = @@ROWCOUNT

    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
    ORDER BY u.UserName
    RETURN @TotalRecords
END
4

1 回答 1

1

这是一个普通的存储过程,因此您可以ALTER PROCEDURE像使用任何其他 SP 一样对其进行修改。

但是我建议不要这样做。该 SP 是会员提供者的一部分,您不知道代码所做的假设。更改排序可能会破坏会员系统的某些关键部分。

最好获取所有用户并使用 linqOrderBy运算符在内存中重新排序返回的序列。

var users = Membership.GetAllUsers().Cast<MembershipUser>()
            .OrderBy(mu => mu.CreationDate);

强制转换是必需的,因为集合 ( MembershipUserCollection) 仅实现非泛型IEnumerable接口。

于 2012-04-26T10:38:32.340 回答