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 상위 버젼에서만 지원합니다.
'Framework' 카테고리의 다른 글
LINQ Syntax 관련 샘플 소스 (0) | 2010.05.13 |
---|---|
Different with ArrayList, List<T> - Boxing, None Boxing(샘플 소스) (0) | 2009.11.25 |
LINQ 자료 (2) | 2009.10.09 |
C# Collection Classes (부제:List 와 ArrayList 의 차이 ) (0) | 2009.10.06 |
Different ways of reading and writing text file data in .NET (0) | 2009.09.21 |