EF的分页查询

///
/// 分页查询
///
/// 排序类型
/// 当前页
/// 每页大小
/// 是否升序排列
/// 条件表达式
/// 排序表达式
///
public virtual IPage Page(int pageIndex, int pageSize, Expression<Func<TEntity, bool>> predicate, bool isAsc,
Expression<Func<TEntity, TKey>> keySelector)
{
if (pageIndex <= 0 && pageSize <= 0)
{
throw new Exception(“pageIndex或pageSize不能小于等于0!”);
}
IPage page = new Page()
{
PageIndex = pageIndex,
PageSize = pageSize
};
int skip = (pageIndex - 1) * pageSize;
if (predicate == null)
{
FutureCount fcount = this.dbSet.FutureCount();
FutureQuery futureQuery = isAsc
? this.dbSet.OrderBy(keySelector).Skip(skip).Take(pageSize).Future()
: this.dbSet.OrderByDescending(keySelector).Skip(skip).Take(pageSize).Future();
page.TotalItems = fcount.Value;
page.Items = futureQuery.ToList();
page.TotalPages = page.TotalItems / pageSize;
if ((page.TotalItems % pageSize) != 0) page.TotalPages++;
}
else
{
var queryable = this.dbSet.Where(predicate);
FutureCount fcount = queryable.FutureCount();
FutureQuery futureQuery = isAsc
? queryable.OrderBy(keySelector).Skip(skip).Take(pageSize).Future()
: queryable.OrderByDescending(keySelector).Skip(skip).Take(pageSize).Future();
page.TotalItems = fcount.Value;
page.Items = futureQuery.ToList();
page.TotalPages = page.TotalItems / pageSize;
if ((page.TotalItems % pageSize) != 0) page.TotalPages++;
}
return page;
}
///
/// 分页实体
///
/// 实体
public class Page : IPage
{
///
/// 当前页
///
public int PageIndex { get; set; }
///
/// 总页数
///
public int TotalPages { get; set; }
///
/// 查询集合总个数
///
public int TotalItems { get; set; }
///
/// 每页项数
///
public int PageSize { get; set; }
///
/// 查询集合
///
public IList Items { get; set; }
}

/// <summary>
/// 分页实体接口
/// </summary>
/// <typeparam name="T">实体</typeparam>
public interface IPage<T>
{
    /// <summary>
    /// 当前页
    /// </summary>
    int PageIndex { get; set; }
    /// <summary>
    /// 总页数
    /// </summary>
    int TotalPages { get; set; }
    /// <summary>
    /// 查询集合总个数
    /// </summary>
    int TotalItems { get; set; }
    /// <summary>
    /// 每页项数
    /// </summary>
    int PageSize { get; set; }
    /// <summary>
    /// 查询集合
    /// </summary>
    IList<T> Items { get; set; }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值