在SQL中進行分頁,網上已經有很多例子了,在這里我使用Linq to SQL讓C#來生成分頁代碼,首先創建分頁的擴展方法:
public static class Extensions { /// <summary> /// 分頁 /// </summary> /// <param name="list"> 數據源 </param> /// <param name="order"> 排序表達式 </param> /// <param name="page"> 第幾頁 </param> /// <param name="size"> 每頁記錄數 </param> /// <param name="count"> 記錄總數 </param> /// <returns></returns> public static IQueryable<T> Pagination<T,TKey>(this IQueryable<T> list, Expression<Func<T, TKey>> order, int page, int size, out int count) { count = list.Count(); return list.Distinct().OrderBy(order).Skip((page - 1) * size).Take(size); } }
然后在程序中調用起來也很方便(只需要在linq查詢中直接調用擴展方法即可):
int
count;
var
q = (
from
a
in
context.WT_Tickets
join
b
in
context.WT_OrderForm
on
a.OrderId
equals
b.Id
select
new
{
BusNo = a.BusNumber,
OrderId = b.Id,
OrderDate = b.OrderDateTime,
}).Where(t=>t.OrderId.Length > 5).Distinct().Pagination(1, 10,
out
count);
var
data = q.ToList();
另外一種分頁方式,按偏移量和頁面記錄數來獲取數據:

public static class Extensions { /// <summary> /// 分頁 /// </summary> /// <param name="list">數據源</param> /// <param name="offset">偏移量</param> /// <param name="limit">查詢記錄數</param> /// <param name="count">記錄總數</param> /// <returns></returns> public static IQueryable<T> Pagination<T>(this IQueryable<T> list,int offset,int limit,out int count) { count = list.Count(); return list.OrderBy(t => t).Skip(offset).Take(limit); } }