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 }; } } }