我需要使用单个查询进行分页,实际上我的代码是。
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;
}
实际上我对数据库调用了五次,如何使用一个或两个查询(最好是单个查询)并使此方法适用于任何对象(动态)
答案 0 :(得分: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();
}
}
}