C# 实现EF的分页功能封装

允我心安 提交于 2019-11-29 08:23:32

在项目过程中经常需要使用分页,EF分页基本实现思路是使用DB.OrderBy(c=>c.id).Skip(10).Take(10)
如果你懂一下泛型和委托的用法的话可以自己封装一个分页函数,代码如下:

using QYHT.WebUI.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Web;

namespace QYHT.WebUI.Common
{
    public class methods
    {
        /// <summary>  
        /// 分页查询 + 条件查询 + 排序  
        /// </summary>  
        /// <typeparam name="Tkey">泛型</typeparam>  
        /// <param name="pageSize">每页大小</param>  
        /// <param name="pageIndex">当前页码</param>  
        /// <param name="total">总数量</param>  
        /// <param name="whereLambda">查询条件</param>  
        /// <param name="orderbyLambda">排序条件</param>  
        /// <param name="isAsc">是否升序</param>  
        /// <returns>IQueryable 泛型集合</returns>  
        public static IQueryable<T> LoadPageItems<T, TKey>(int pageSize, int pageIndex, out int total, Expression<Func<T, bool>> whereLambda, Expression<Func<T, TKey>> orderbyLambda, bool isAsc) where T : class
        {
            //自己的EF数据上下文
            mk_kktjwEntities mkxx = new mk_kktjwEntities();
            total = mkxx.Set<T>().Where(whereLambda).Count();
            //倒序或升序
            if (isAsc)
            {
                var temp = mkxx.Set<T>().Where(whereLambda)
                             .OrderBy<T, TKey>(orderbyLambda)
                             .Skip(pageSize * (pageIndex - 1))
                             .Take(pageSize);
                return temp.AsQueryable();
            }
            else
            {
                var temp = mkxx.Set<T>().Where(whereLambda)
                           .OrderByDescending<T, TKey>(orderbyLambda)
                           .Skip(pageSize * (pageIndex - 1))
                           .Take(pageSize);
                return temp.AsQueryable();
            }
        }
    }
}

上面代码要注意需要改写自己的EF数据上下文,LoadPageItems

 var orderlist = WeichatManageApiHelper.LoadPageItems<View_Mkxx_OrderStatistics, DateTime>(pageSize, pageIndex, out total, c => c.OrderDate <= end && c.OrderDate >= start, u => u.OrderDate, false).ToList();

以上就是轻松实现EF中的分页功能

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!