在项目过程中经常需要使用分页,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中的分页功能
来源:CSDN
作者:weixin_35830789
链接:https://blog.csdn.net/weixin_35830789/article/details/79746638