You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
3.4 KiB
97 lines
3.4 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace Common.Helper.Page
|
|
{
|
|
/// <summary>
|
|
/// 分页帮助类
|
|
/// </summary>
|
|
public class PageHelper
|
|
{
|
|
/*
|
|
* 1.分页 list.Skip(x).Take(y);
|
|
* 2.(x,y)超过(0,list.Count)范围时list为空[],在范围内(或单边超过范围)时显示范围内数据
|
|
*/
|
|
/// <summary>
|
|
/// 分页
|
|
/// </summary>
|
|
/// <typeparam name="T">数据类型</typeparam>
|
|
/// <param name="list">数据</param>
|
|
/// <param name="page">页码</param>
|
|
/// <param name="size">数据量/页</param>
|
|
/// <returns></returns>
|
|
public static Data Pagination<T>(List<T> list, int page, int size)
|
|
{
|
|
if (list == null)
|
|
return new Data(0, page, null);
|
|
if (list.Count != 0 && list.Count >= size)
|
|
return new Data(list.Count, page <= 0 ? 0 : page,
|
|
list.Skip(Convert.ToInt32((page <= 0 ? 0 : page - 1) * size)).Take(size).ToList());
|
|
return new Data(list.Count, page, list);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 该分页方法适用于sql server 2008 .net core 3.1不支持2008数据库
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <param name="db"></param>
|
|
/// <param name="dbTable"></param>
|
|
/// <param name="page"></param>
|
|
/// <param name="size"></param>
|
|
/// <returns></returns>
|
|
public static Data Pagination<T>(DbContext db, DbSet<T> dbTable, int page, int size) where T : class
|
|
{
|
|
var entityType = db.Model.FindEntityType(typeof(T));
|
|
var tableName = entityType.GetTableName();
|
|
var primaryKeyName = entityType.FindPrimaryKey().Properties.First().Name;
|
|
return new Data(dbTable.Count(), page, dbTable.FromSqlRaw($"select * from (select ROW_NUMBER() OVER(ORDER BY {primaryKeyName}) RowSerialNumber ,* from {tableName}) s where RowSerialNumber BETWEEN {(page - 1) * size + 1} and {page * size}").ToList());
|
|
}
|
|
/// <summary>
|
|
/// 该方法适用于sql server 2008以上的数据库 sql server 2008会报错
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <param name="list"></param>
|
|
/// <param name="page"></param>
|
|
/// <param name="size"></param>
|
|
/// <returns></returns>
|
|
public static Data Pagination<T>(IEnumerable<T> list, int page, int size)
|
|
{
|
|
return list == null ? new Data(0, page, null) : new Data(list.Count(), page, list.Skip(Convert.ToInt32((page <= 0 ? 0 : page - 1) * size)).Take(size).ToList());
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 数据页数
|
|
/// </summary>
|
|
public class Data
|
|
{
|
|
/// <summary>
|
|
/// 总数
|
|
/// </summary>
|
|
public int? Total { get; set; }
|
|
/// <summary>
|
|
/// 当前页码
|
|
/// </summary>
|
|
public int? Current { get; set; }
|
|
/// <summary>
|
|
/// 数据
|
|
/// </summary>
|
|
public object List { get; set; }
|
|
|
|
/// <summary>
|
|
/// 入参
|
|
/// </summary>
|
|
/// <param name="total"></param>
|
|
/// <param name="current"></param>
|
|
/// <param name="list"></param>
|
|
public Data(int? total, int? current, object list)
|
|
{
|
|
Total = total ?? 0;
|
|
Current = current;
|
|
List = list;
|
|
}
|
|
}
|
|
}
|
|
|
|
|