2017-05-12 3 views
0

Ich muss paginate mit einer einzigen Abfrage, eigentlich ist mein Code.LINQ - Wie paginate mit einzelnen Linq-Abfrage in LINQ/C#

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; 
} 

Eigentlich rufe ich fünf Mal Datenbank, wie kann ich dies tun, mit ein oder zwei Abfragen (vorzugsweise eine einzelne Abfrage) und machen diese Methode der Arbeit mit einem Objekt (dynamisch)

+1

Fünfmal? Ich sehe nur zwei Datenbankabfragen im Code. –

Antwort

0

Sie können ein erklären neue Erweiterung für IEnumerable oder IQueryable. Einzelheiten finden Sie in der Dokumentation Msdn. Beispielsweise;

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); 
     } 
    } 
} 

Beispiel Nutzung:

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(); 
     } 
    } 
}