107 lines
3.2 KiB
C#
107 lines
3.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using Hncore.Infrastructure.Data;
|
|
using Hncore.Infrastructure.Extension;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace Hncore.Infrastructure.EntitiesExtension
|
|
{
|
|
public static class IQueryableExtend
|
|
{
|
|
#region 返回IQueryable<T>前几条数据
|
|
|
|
/// <summary>
|
|
/// 返回IQueryable前几条数据
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <param name="query"></param>
|
|
/// <param name="TopN"></param>
|
|
/// <returns></returns>
|
|
public static IQueryable<T> TopN<T>(this IQueryable<T> query, int TopN)
|
|
{
|
|
return query.Take(TopN);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 对IQueryable<T>进行分页
|
|
|
|
/// <summary>
|
|
/// 对IQueryable进行分页
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <param name="query"></param>
|
|
/// <param name="PageSize">每页多少条数据</param>
|
|
/// <param name="PageIndex">当前页</param>
|
|
/// <returns></returns>
|
|
public static IQueryable<T> QueryPager<T>(this IQueryable<T> query, int PageSize, int PageIndex)
|
|
{
|
|
if (PageIndex <= 0)
|
|
{
|
|
PageIndex = 1;
|
|
}
|
|
|
|
if (PageSize <= 0)
|
|
{
|
|
PageSize = 1;
|
|
}
|
|
|
|
if (PageSize > 0)
|
|
return query.Skip((PageIndex - 1) * PageSize).Take(PageSize);
|
|
return query;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 得到IQueryable<T>的分页后实体集合
|
|
|
|
/// <summary>
|
|
/// 得到IQueryable的分页后实体集合
|
|
/// </summary>
|
|
/// <param name="query"></param>
|
|
/// <param name="pageSize">每页多少条数据</param>
|
|
/// <param name="pageIndex">当前页</param>
|
|
/// <param name="isTotal">是否统计总行数</param>
|
|
/// <returns></returns>
|
|
public static PageData<T> ListPager<T>(this IQueryable<T> query, int pageSize, int pageIndex, bool isTotal)
|
|
{
|
|
PageData<T> list = new PageData<T>();
|
|
|
|
if (isTotal)
|
|
{
|
|
list.RowCount = query.Count();
|
|
}
|
|
|
|
list.List = query.QueryPager<T>(pageSize, pageIndex).ToList();
|
|
|
|
return list;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 得到IQueryable的分页后实体集合
|
|
/// </summary>
|
|
/// <param name="query"></param>
|
|
/// <param name="pageSize">每页多少条数据</param>
|
|
/// <param name="pageIndex">当前页</param>
|
|
/// <param name="isTotal">是否统计总行数</param>
|
|
/// <returns></returns>
|
|
public static async Task<PageData<T>> ListPagerAsync<T>(this IQueryable<T> query, int pageSize, int pageIndex,
|
|
bool isTotal)
|
|
{
|
|
PageData<T> list = new PageData<T>();
|
|
|
|
if (isTotal)
|
|
{
|
|
list.RowCount = await query.CountAsync();
|
|
}
|
|
|
|
list.List = await query.QueryPager<T>(pageSize, pageIndex).ToListAsync();
|
|
|
|
return list;
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
} |