LINQ를 이용하여 Paging 처리한 샘플코드이다.

샘플 코든는 MSDN에서 제공하는 Sample Database - Northwind Orders 테이블 데이터를 이용하였으며,
LINQ to SQL Classes 타입으로 데이터 객체를 생성하여 접근 하였다.

class Program
{
    // LINQ to SQL class
    static OrderDataContext dbContext = new OrderDataContext();

    static void Main(string[] args)
    {
        Paging(1, 50);

        Console.Read();
    }

    public static void Paging(int pageIdx, int rowCnt)
    {
        var query = from orders in dbContext.Orders
                    orderby orders.OrderID
                    select orders.ShipName;

        var result = query.Skip((pageIdx - 1) * rowCnt).Take(rowCnt);
    }
}

 

페이징 처리를 위해서는 시작하는 페이지 번호와 몇개의 데이터 행을 보여줄지 해당 데이터를 읽어와야 한다.
위의 코드 Paging 메소드를 보면 대략 이러하다..

테이블의 데이터를 쿼리한 후 
Skip 확장 메소드를 활용하여 시작하는 행의 번호를 지정(한 페이지에 보여주는 데이터의 수로 행 번호 계산)해 주고,
Take 확장 메소드를 활용하여 그 시작하는 행 번호로부터 몇 개의 데이터를 읽어올지 지정해주면 된다.

해당 코드 분석하면,
첫번째 페이징 처리 경우는 MS-SQL에서의 TOP이 자동 생성되어 쿼리하고,
두번째 이후 페이징 처리는 ROW_NUMBER 함수를 사용하여 인라인 뷰를 생성하고 TOP를 이용하여 페이징 처리를 한다고 하네요.

참고로 ROW_NUMBER 함수는 MS-SQL 2005 상위 버젼에서만 지원합니다.

+ Recent posts