2012-04-26 7 views
0

내 웹 응용 프로그램에서 ASP.NET 멤버쉽을 사용하고 사용자 목록에 GetAllUsers 메서드를 사용했지만이 메서드는 UserName에 의해 정렬 된 목록을 반환합니다. 주문하려면 CateDate에 저장해야합니다. 방금처럼 ALTER PROCEDURE으로 수정할 수 있도록ASP.NET MEmbership 저장 프로 시저를 수정하는 방법

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 
+0

지금은 SP를 변경하는 것이 좋지만 코드를 잘 작성하여 코드에서 원하는 방식으로 호출하는 것이 좋습니다. 다른 사람들이 당신이 영향을 줄 수 있다고 생각하는 것을 결코 알지 못한다. – Aristos

답변

1

그것은, 일반 저장 프로 시저입니다 : 내 SQL의 절차하지만 난 수정하거나 편집 :( 이 방법을 잘 모릅니다 내 GetAllUsers 저장 프로 시저의 코드 다른 SP.

그러나 나는 그것을 반대합니다. 그 SP는 membersh의 일부입니다 ip 제공자이고 코드에 의해 가정 된 사항을 알지 못합니다. 주문을 변경하면 회원 시스템의 일부 중요한 부분이 손상 될 수 있습니다.

모든 사용자를 얻고 linq OrderBy 연산자를 사용하면 반환 된 시퀀스를 메모리에서 재정렬하는 것이 좋습니다. 컬렉션 (MembershipUserCollection가)에만 제네릭이 아닌 IEnumerable 인터페이스를 구현하기 때문에

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

캐스트가 필요합니다.

+0

나는 이걸 사용했는데 오류가있어, 대는 OrderBy에 대해 모른다. -? 아래에 빨간색 선이 표시되고 주문 번호 –

+0

이 작동합니다. var 사용자 = Membership.GetAllUsers(). 캐스트 () . 주문 시간 (뮤 => 무단 결). –

관련 문제