Entity Framework 分頁處理


在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  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);
        }
    }
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM