using Masuit.Tools.Core;
using Microsoft.EntityFrameworkCore;
namespace Masuit.Tools.Models;
public static partial class IQueryableExt
{
///
/// 生成分页集合
///
///
///
/// 当前页
/// 页大小
///
public static async Task> ToPagedListAsync(this IQueryable query, int page, int size)
{
var totalCount = await query.CountAsync();
if (1L * page * size > totalCount)
{
page = (int)Math.Ceiling(totalCount / (size * 1.0));
}
if (page <= 0)
{
page = 1;
}
var list = await query.Skip(size * (page - 1)).Take(size).ToListAsync();
return new PagedList(list, page, size, totalCount);
}
///
/// 生成分页集合
///
///
///
/// 当前页
/// 页大小
///
public static async Task> ToPagedListNoLockAsync(this IQueryable query, int page, int size)
{
var totalCount = await query.CountAsync();
if (1L * page * size > totalCount)
{
page = (int)Math.Ceiling(totalCount / (size * 1.0));
}
if (page <= 0)
{
page = 1;
}
var list = await query.Skip(size * (page - 1)).Take(size).ToListWithNoLockAsync();
return new PagedList(list, page, size, totalCount);
}
///
/// 生成分页集合
///
///
///
/// 当前页
/// 页大小
///
public static PagedList ToPagedList(this IQueryable query, int page, int size)
{
var totalCount = query.Count();
if (1L * page * size > totalCount)
{
page = (int)Math.Ceiling(totalCount / (size * 1.0));
}
if (page <= 0)
{
page = 1;
}
var list = query.Skip(size * (page - 1)).Take(size).ToList();
return new PagedList(list, page, size, totalCount);
}
///
/// 生成分页集合
///
///
///
/// 当前页
/// 页大小
///
public static PagedList ToPagedListNoLock(this IQueryable query, int page, int size)
{
var totalCount = query.Count();
if (1L * page * size > totalCount)
{
page = (int)Math.Ceiling(totalCount / (size * 1.0));
}
if (page <= 0)
{
page = 1;
}
var list = query.Skip(size * (page - 1)).Take(size).ToListWithNoLock();
return new PagedList(list, page, size, totalCount);
}
///
/// 生成分页集合
///
///
///
/// 当前页
/// 页大小
///
public static PagedList ToPagedList(this IEnumerable query, int page, int size)
{
var totalCount = query.Count();
if (1L * page * size > totalCount)
{
page = (int)Math.Ceiling(totalCount / (size * 1.0));
}
if (page <= 0)
{
page = 1;
}
var list = query.Skip(size * (page - 1)).Take(size).ToList();
return new PagedList(list, page, size, totalCount);
}
}