using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using Wood.Entity;
namespace Wood.Data.Repository
{
///
/// 分页拓展类
///
public static class SqlSugarPagedExtensions
{
///
/// 分页拓展
///
/// 对象
/// 当前页码,从1开始
/// 页码容量
/// 查询结果 Select 表达式
///
public static TDataPaged ToPagedList(this ISugarQueryable query, int pageIndex, int pageSize,
Expression> expression)
{
var total = 0;
var items = query.ToPageList(pageIndex, pageSize, ref total, expression);
return CreateSqlSugarPagedList(items, total, pageIndex, pageSize);
}
///
/// 分页拓展
///
/// 对象
/// 当前页码,从1开始
/// 页码容量
///
public static TDataPaged ToPagedList(this ISugarQueryable query, int pageIndex, int pageSize)
{
var total = 0;
var items = query.ToPageList(pageIndex, pageSize, ref total);
return CreateSqlSugarPagedList(items, total, pageIndex, pageSize);
}
///
/// 分页拓展
///
/// 对象
/// 当前页码,从1开始
/// 页码容量
/// 查询结果 Select 表达式
///
public static async Task> ToPagedListAsync(this ISugarQueryable query, int pageIndex, int pageSize,
Expression> expression)
{
RefAsync total = 0;
var items = await query.ToPageListAsync(pageIndex, pageSize, total, expression);
return CreateSqlSugarPagedList(items, total, pageIndex, pageSize);
}
///
/// 分页拓展
///
/// 对象
/// 当前页码,从1开始
/// 页码容量
///
public static async Task> ToPagedListAsync(this ISugarQueryable query, int pageIndex, int pageSize)
{
RefAsync total = 0;
var items = await query.ToPageListAsync(pageIndex, pageSize, total);
return CreateSqlSugarPagedList(items, total, pageIndex, pageSize);
}
///
/// 分页拓展
///
/// 对象
/// 当前页码,从1开始
/// 页码容量
/// 查询结果 Select 表达式
///
public static async Task> ToPagedListAsync(this ISugarQueryable query, Pagination pagination,
Expression> expression)
{
RefAsync total = 0;
var items = await query.OrderBy(pagination.Sort).ToPageListAsync(pagination.PageIndex, pagination.PageSize, total, expression);
return CreateSqlSugarPagedList(items, total, pagination.PageIndex, pagination.PageSize);
}
///
/// 分页拓展
///
/// 对象
/// 当前页码,从1开始
/// 页码容量
///
public static async Task> ToPagedListAsync(this ISugarQueryable query, Pagination pagination)
{
RefAsync total = 0;
var items = await query.OrderBy(pagination.Sort).ToPageListAsync(pagination.PageIndex, pagination.PageSize, total);
return CreateSqlSugarPagedList(items, total, pagination.PageIndex, pagination.PageSize);
}
///
/// 分页拓展
///
/// 集合对象
/// 当前页码,从1开始
/// 页码容量
///
public static TDataPaged ToPagedList(this IEnumerable list, int pageIndex, int pageSize)
{
var total = list.Count();
var items = list.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
return CreateSqlSugarPagedList(items, total, pageIndex, pageSize);
}
///
/// 创建 对象
///
///
/// 分页内容的对象集合
/// 总条数
/// 当前页码,从1开始
/// 页码容量
///
public static TDataPaged CreateSqlSugarPagedList(IEnumerable items, int total, int pageIndex, int pageSize)
{
var totalPages = pageSize > 0 ? (int)Math.Ceiling(total / (double)pageSize) : 0;
return new TDataPaged
{
Page = pageIndex,
PageSize = pageSize,
Data = items,
Total = total,
TotalPages = totalPages,
HasNextPage = pageIndex < totalPages,
HasPrevPage = pageIndex - 1 > 0
};
}
}
}