2017-05-12 10 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

5倍?コードでは2つのデータベースクエリしか表示されません。 –

答えて

0

私は1つのまたは2つのクエリ(好ましくは、単一のクエリ)でこれを行うと、任意のオブジェクト(動的)で、このメソッドの作業を行うことができますどのように、データベースに5回を呼び出します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(); 
     } 
    } 
} 
関連する問題