///
/// 分页查询
///
/// 排序类型
/// 当前页
/// 每页大小
/// 是否升序排列
/// 条件表达式
/// 排序表达式
///
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; }
}