sunpengfei
2025-08-08 85279c0daafcfea80db14cdd8dfe85f7c7fddba4
fix:bug
3个文件已修改
109 ■■■■■ 已修改文件
FlexJobApi.Core/FlexJobApi.Core.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/Utils/DbUtils/DbUtils.cs 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
FlexJobApi.Core/FlexJobApi.Core.xml
@@ -5193,15 +5193,6 @@
            <param name="cancellationToken"></param>
            <returns></returns>
        </member>
        <member name="M:FlexJobApi.Core.DbUtils.CustomOrderBy``1(System.Linq.IQueryable{``0},System.Collections.Generic.List{FlexJobApi.Core.PagedListQueryPageModelOrderInput})">
            <summary>
            排序
            </summary>
            <typeparam name="T"></typeparam>
            <param name="q"></param>
            <param name="orders"></param>
            <returns></returns>
        </member>
        <member name="M:FlexJobApi.Core.DbUtils.SetIsDisabled``1(FlexJobApi.Core.SetIsDisabledCommand,System.Func{System.Linq.IQueryable{``0},System.Linq.IQueryable{``0}},System.Threading.CancellationToken)">
            <summary>
            设置是否禁用
FlexJobApi.Core/Utils/DbUtils/DbUtils.cs
@@ -175,7 +175,7 @@
            CancellationToken cancellationToken = default)
            where TItem : class, new()
        {
            //q = q.CustomOrderBy(page.OrderInput);
            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>();
@@ -185,66 +185,51 @@
            return result;
        }
        /// <summary>
        /// 排序
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="q"></param>
        /// <param name="orders"></param>
        /// <returns></returns>
        public static IQueryable<T> CustomOrderBy<T>(
            this IQueryable<T> q,
            List<PagedListQueryPageModelOrderInput> orders)
        public static IOrderedQueryable<T> CustomOrderBy<T>(this IQueryable<T> q, List<PagedListQueryPageModelOrderInput> orders)
        {
            if (orders.IsNull()) return q;
            var entityType = typeof(T);
            int index = 0;
            var props = entityType.GetProperties();
            foreach (var order in orders)
            ParameterExpression parameter = Expression.Parameter(typeof(T), "p");
            PagedListQueryPageModelOrderInput orderInput = orders[0];
            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++)
            {
                if (string.IsNullOrEmpty(order.Property)) continue;
                // 获取排序字段的属性信息
                var propertyInfo = props.FirstOrDefault(it => it.Name.Equals(order.Property, StringComparison.OrdinalIgnoreCase));
                if (propertyInfo == null) throw Oops.Oh(EnumErrorCodeType.s404, $"该排序字段{order.Property}");
                // 创建表达式树
                var parameter = Expression.Parameter(entityType, "x");
                var propertyAccess = Expression.Property(parameter, propertyInfo);
                var lambda = Expression.Lambda(propertyAccess, parameter);
                string methodName;
                if (index == 0)
                {
                    // 首次排序
                    methodName = order.Order == EnumPagedListOrder.Asc
                        ? "OrderBy"
                        : "OrderByDescending";
                }
                else
                {
                    // 二次及以后排序
                    methodName = order.Order == EnumPagedListOrder.Asc
                        ? "ThenBy"
                        : "ThenByDescending";
                }
                // 调用相应的排序方法
                var resultExpression = Expression.Call(
                    typeof(Queryable),
                    methodName,
                    [entityType, propertyInfo.PropertyType],
                    q.Expression,
                    Expression.Quote(lambda)
                );
                q = q.Provider.CreateQuery<T>(resultExpression);
                index++;
                PagedListQueryPageModelOrderInput orderInput2 = orders[i];
                orderedQueryable = (orderInput2.Order == EnumPagedListOrder.Asc)
                    ? ThenBy(orderedQueryable, orderInput2.Property, parameter)
                    : ThenByDescending(orderedQueryable, orderInput2.Property, parameter);
            }
            return q;
            return orderedQueryable;
        }
        private static IOrderedQueryable<T> Ordering<T>(IQueryable<T> source, ParameterExpression parameter, string propertyName, string methodName)
        {
            Type typeFromHandle = typeof(T);
            MemberExpression memberExpression = Expression.PropertyOrField(parameter, propertyName);
            LambdaExpression expression = Expression.Lambda(memberExpression, parameter);
            MethodCallExpression expression2 = Expression.Call(typeof(Queryable), methodName, [typeFromHandle, memberExpression.Type], source.Expression, Expression.Quote(expression));
            return (IOrderedQueryable<T>)source.Provider.CreateQuery<T>(expression2);
        }
        public static IOrderedQueryable<T> OrderBy<T>(IQueryable<T> source, string propertyName, ParameterExpression parameter)
        {
            return Ordering(source, parameter, propertyName, "OrderBy");
        }
        public static IOrderedQueryable<T> OrderByDescending<T>(IQueryable<T> source, string propertyName, ParameterExpression parameter)
        {
            return Ordering(source, parameter, propertyName, "OrderByDescending");
        }
        public static IOrderedQueryable<T> ThenBy<T>(IOrderedQueryable<T> source, string propertyName, ParameterExpression parameter)
        {
            return Ordering(source, parameter, propertyName, "ThenBy");
        }
        public static IOrderedQueryable<T> ThenByDescending<T>(IOrderedQueryable<T> source, string propertyName, ParameterExpression parameter)
        {
            return Ordering(source, parameter, propertyName, "ThenByDescending");
        }
        /// <summary>
FlexJobApi.FlexJobServer.Application/Tasks/Queries/TaskInfoQueryHandler.cs
@@ -87,7 +87,6 @@
            {
                q = q.Where(it => it.RecommendStatus == request.RecommendStatus);
            }
            q = q.CustomOrderBy(request.PageModel.OrderInput);
            var s = from t in q
                    join tu in rep.Change<TaskInfoUser>().AsQueryable().AsNoTracking() on t.Id equals tu.TaskInfoId into tug
                    select new GetTaskInfosQueryResultItem