using System; using System.Collections.Generic; using System.Linq; using System.Linq.Dynamic.Core; using System.Linq.Expressions; using System.Reflection; using System.Text; using System.Threading.Tasks; using Furion.DatabaseAccessor; using Furion.DatabaseAccessor.Extensions; using Mapster; namespace Ewide.Core.Extension { public static class PageExtensions { public static string OrderBuilder(PageInputBase pageInput, bool descSort = true) { var type = typeof(T); var hasId = type.GetProperty("Id") != null; var hasSort = type.GetProperty("Sort") != null; var defaultField = hasId ? "Id" : (hasSort ? "Sort" : ""); // 约定默认每张表都有Id排序 var orderStr = string.IsNullOrEmpty(defaultField) ? "" : defaultField + (descSort ? " Desc" : " Asc"); // 排序是否可用-排序字段和排序顺序都为非空才启用排序 if (!string.IsNullOrEmpty(pageInput.SortField) && !string.IsNullOrEmpty(pageInput.SortOrder)) { orderStr = $"{pageInput.SortField} {(pageInput.SortOrder == pageInput.DescStr ? "Desc" : "Asc")}"; } return orderStr; } public static Task> ToPageData(this IQueryable source, PageInputBase input) where T : new() { return source.OrderBy(OrderBuilder(input)).ToPagedListAsync(input.PageNo, input.PageSize); } public static Task> ToPageData(this IQueryable source, PageInputBase input) where O : new() { return source.OrderBy(OrderBuilder(input)).Select(u => u.Adapt()).ToPagedListAsync(input.PageNo, input.PageSize); } } }