From bf5084b9bd44ba20ace6107536cba6955e94ceaf Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期五, 08 八月 2025 16:15:09 +0800 Subject: [PATCH] pref:优化 --- FlexJobApi.Core/Utils/DbUtils/DbUtils.cs | 44 +++++++++++++++++++++++++++++++------------- 1 files changed, 31 insertions(+), 13 deletions(-) diff --git a/FlexJobApi.Core/Utils/DbUtils/DbUtils.cs b/FlexJobApi.Core/Utils/DbUtils/DbUtils.cs index 55647c2..2e0f85f 100644 --- a/FlexJobApi.Core/Utils/DbUtils/DbUtils.cs +++ b/FlexJobApi.Core/Utils/DbUtils/DbUtils.cs @@ -160,6 +160,31 @@ result.Data = pagedList.Items.ToList(); return result; } + /// <summary> + /// 鏌ヨ鍒嗛〉鍒楄〃鏁版嵁 + /// </summary> + /// <typeparam name="TResult"></typeparam> + /// <typeparam name="TItem"></typeparam> + /// <param name="page"></param> + /// <param name="q"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public static async Task<TResult> GetPagedListAsync<TResult, TItem>( + this PagedListQueryPageModel page, + IQueryable<TItem> q, + CancellationToken cancellationToken = default) + where TItem : class, new() + where TResult : PagedListQueryResult<TItem>, new() + { + q = q.CustomOrderBy(page.OrderInput); + var pagedList = await q.ToPagedListAsync(page.Page, page.Rows, cancellationToken); + var result = new TResult(); + result.PageModel = page.Adapt<PagedListQueryResultPageModel>(); + result.PageModel.TotalCount = pagedList.TotalCount; + result.PageModel.TotalPage = pagedList.TotalPages; + result.Data = pagedList.Items.ToList(); + return result; + } /// <summary> /// 鏌ヨ鍒嗛〉鍒楄〃鏁版嵁 @@ -169,34 +194,27 @@ /// <param name="q"></param> /// <param name="cancellationToken"></param> /// <returns></returns> - public static async Task<PagedListQueryResult<TItem>> GetPagedListAsync<TItem>( + public static Task<PagedListQueryResult<TItem>> GetPagedListAsync<TItem>( this PagedListQueryPageModel page, IQueryable<TItem> q, CancellationToken cancellationToken = default) where TItem : class, new() { - q = q.CustomOrderBy(page.OrderInput); - var pagedList = await q.ToPagedListAsync(page.Page, page.Rows, cancellationToken); - var result = new PagedListQueryResult<TItem>(); - result.PageModel = page.Adapt<PagedListQueryResultPageModel>(); - result.PageModel.TotalCount = pagedList.TotalCount; - result.PageModel.TotalPage = pagedList.TotalPages; - result.Data = pagedList.Items.ToList(); - return result; + return GetPagedListAsync<PagedListQueryResult<TItem>, TItem>(page, q, cancellationToken); } public static IOrderedQueryable<T> CustomOrderBy<T>(this IQueryable<T> q, List<PagedListQueryPageModelOrderInput> orders) { ParameterExpression parameter = Expression.Parameter(typeof(T), "p"); PagedListQueryPageModelOrderInput orderInput = orders[0]; - IOrderedQueryable<T> orderedQueryable = (orderInput.Order == EnumPagedListOrder.Asc) - ? OrderBy(q, orderInput.Property, parameter) + IOrderedQueryable<T> orderedQueryable = (orderInput.Order == EnumPagedListOrder.Asc) + ? OrderBy(q, orderInput.Property, parameter) : OrderByDescending(q, orderInput.Property, parameter); for (int i = 1; i < orders.Count; i++) { PagedListQueryPageModelOrderInput orderInput2 = orders[i]; - orderedQueryable = (orderInput2.Order == EnumPagedListOrder.Asc) - ? ThenBy(orderedQueryable, orderInput2.Property, parameter) + orderedQueryable = (orderInput2.Order == EnumPagedListOrder.Asc) + ? ThenBy(orderedQueryable, orderInput2.Property, parameter) : ThenByDescending(orderedQueryable, orderInput2.Property, parameter); } -- Gitblit v1.9.1