// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
//
// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
//
// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
namespace Admin.NET.Core;
///
/// 分页泛型集合
///
///
public class SqlSugarPagedList
{
///
/// 页码
///
public int Page { get; set; }
///
/// 页容量
///
public int PageSize { get; set; }
///
/// 总条数
///
public int Total { get; set; }
///
/// 总页数
///
public int TotalPages { get; set; }
///
/// 当前页集合
///
public IEnumerable Items { get; set; }
///
/// 是否有上一页
///
public bool HasPrevPage { get; set; }
///
/// 是否有下一页
///
public bool HasNextPage { get; set; }
}
///
/// 分页拓展类
///
public static class SqlSugarPagedExtensions
{
///
/// 分页拓展
///
/// 对象
/// 当前页码,从1开始
/// 页码容量
/// 查询结果 Select 表达式
///
public static SqlSugarPagedList 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 SqlSugarPagedList 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开始
/// 页码容量
///
public static async Task> ToPagedListDataMaskAsync(this ISugarQueryable query, int pageIndex, int pageSize) where TEntity : class
{
RefAsync total = 0;
var items = await query.ToPageListAsync(pageIndex, pageSize, total);
items.ForEach(x => x.MaskSensitiveData());
return CreateSqlSugarPagedList(items, total, pageIndex, pageSize);
}
///
/// 脱敏分页拓展
///
/// 集合对象
/// 当前页码,从1开始
/// 页码容量
///
public static SqlSugarPagedList ToPagedListDataMask(this IEnumerable list, int pageIndex, int pageSize) where TEntity : class
{
var total = list.Count();
var items = list.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
items.ForEach(x => x.MaskSensitiveData());
return CreateSqlSugarPagedList(items, total, pageIndex, pageSize);
}
///
/// 分页拓展
///
/// 集合对象
/// 当前页码,从1开始
/// 页码容量
///
public static SqlSugarPagedList 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开始
/// 页码容量
///
private static SqlSugarPagedList CreateSqlSugarPagedList(IEnumerable items, int total, int pageIndex, int pageSize)
{
var totalPages = pageSize > 0 ? (int)Math.Ceiling(total / (double)pageSize) : 0;
return new SqlSugarPagedList
{
Page = pageIndex,
PageSize = pageSize,
Items = items,
Total = total,
TotalPages = totalPages,
HasNextPage = pageIndex < totalPages,
HasPrevPage = pageIndex - 1 > 0
};
}
}