2017-05-12 1 views
0

단일 쿼리로 페이지를 매겨야합니다. 실제로는 내 코드입니다.LINQ - LINQ/C에서 단일 linq 쿼리로 페이지 매기기를 수행하는 방법 #

public object Paginate(int Page) // Page = 1 
{ 
    object result = new object(); 

    const int paginateResults = 10; //showed rows 

    int TotalItems = (from x in Members select new { x.ID }).Count(); // = 100 
    //this last line is for show: total items 100 

    int itemsStart = (Page-1) * paginateResults; // = 1 
    int itemsEnd = Page * paginateResults;// = 10 
    //this last 2 lines is for show: showing results from 1 - 10 

    int PaginatePages = TotalItems/paginateResults; //10 pages [1][2][3]...[9] (for the buttons)  

    List<EOMEMBER> currentPageItems = (from x in Members select x) 
     .Skip(itemsStart).Take(paginateResults).ToList(); // results from 1 - 10  



    return result; 
} 

사실 난

+1

다섯 번? 코드에서 두 개의 데이터베이스 쿼리 만 보입니다. –

답변

0

당신은을 선언 할 수 있습니다 (동적) 내가 하나 개 또는 두 개의 쿼리 (바람직하게는 단일 쿼리)이 작업을 수행 할 수있는 방법, 데이터베이스에 다섯 번 호출하고 객체와이 방법을 작동하게 IEnumerable 또는 IQueryable에 대한 새 확장. Msdn 설명서를 참조하십시오. 예를 들어;

using System; 
using System.Collections.Generic; 
using System.Linq; 

namespace Demo.Extensions 
{ 
    public static class IEnumerableExtensions 
    { 
     public static IEnumerable<T> Page<T>(this IEnumerable<T> queryable, int page, int pageSize) 
     { 
      return queryable.Skip((page - 1) * pageSize).Take(pageSize); 
     } 
    } 
} 

사용 예제 :

using System; 
using System.Linq; 
using Demo.Extensions; 

namespace Demo 
{ 
    class MainClass 
    { 
     public static void Main(string[] args) 
     { 
      var items = Enumerable.Range(1, 100).Page(2, 10); 
      foreach (var item in items) 
      { 
       Console.WriteLine(item); 
      } 
      Console.ReadKey(); 
     } 
    } 
}