群主还有方法可以优化这个方法性能吗 返回

SqlSugar 待处理
218
该叫什么 Tom 发布于2周前
悬赏:5 飞吻

        public async Task<IPageList<CoreCmsOrder>> QueryPageAsync(

            Expression<Func<CoreCmsOrder, bool>> predicate,

            Expression<Func<CoreCmsOrder, object>> orderByExpression,

            OrderByType orderByType,

            int pageIndex = 1,

            int pageSize = 20,

            bool blUseNoLock = false)

        {

            RefAsync<int> totalCount = 0;


            // 1. 先查订单(分页)

            var page = await DbClient.Queryable<CoreCmsOrder, CoreCmsUser, SysUser>(

                (sOrder, sUser, sysuser) => new JoinQueryInfos(

                    JoinType.Inner, sOrder.userId == sUser.id,

                    JoinType.Inner, sOrder.sysid == sysuser.id))

                .Select((sOrder, sUser, sysuser) => new CoreCmsOrder

                {

                    orderId = sOrder.orderId,

                    departmentId = (int)sysuser.departmentId,

                    companyId = (int)sysuser.companyId,

                    groupId = (int)sysuser.groupId,

                    goodsAmount = sOrder.goodsAmount,

                    payedAmount = sOrder.payedAmount,

                    orderAmount = sOrder.orderAmount,

                    payStatus = sOrder.payStatus,

                    status = sOrder.status,

                    orderType = sOrder.orderType,

                    paymentCode = sOrder.paymentCode,

                    paymentTime = sOrder.paymentTime,

                    logisticsId = sOrder.logisticsId,

                    logisticsName = sOrder.logisticsName,

                    userId = sOrder.userId,

                    offlineRefund = sOrder.offlineRefund,

                    offlineType = sOrder.offlineType,

                    confirmStatus = sOrder.confirmStatus,

                    confirmTime = sOrder.confirmTime,

                    storeId = sOrder.storeId,

                    shipAreaId = sOrder.shipAreaId,

                    shipAddress = sOrder.shipAddress,

                    shipName = sOrder.shipName,

                    shipMobile = sOrder.shipMobile,

                    memo = sOrder.memo,

                    mark = sOrder.mark,

                    source = sOrder.source,

                    isdel = sOrder.isdel,

                    createTime = sOrder.createTime,

                    updateTime = sOrder.updateTime,

                    userNickName = sUser.nickName,

                    sale = sysuser.nickName,

                    customerName = sUser.userName,

                    number = sUser.number,

                    collectingName = sOrder.collectingName,

                    orderTypeName = sOrder.orderTypeName,

                    sourceId = Convert.ToInt32(sUser.sourceId),

                    sysid = Convert.ToInt32(sysuser.id),

                    coupon_fee = sOrder.coupon_fee,

                    after_sale_status = sOrder.after_sale_status,

                    sku_info = sOrder.sku_info,

                    hlstatus = sOrder.hlstatus,

                    customerClassId = sOrder.customerClassId,

                    putMoney = sOrder.putMoney,

                    approveTime = sOrder.approveTime,

                    cancelTime = sOrder.cancelTime,

                    revokeTime = sOrder.revokeTime,

                    storeTime = sOrder.storeTime,

                    sendTime = sOrder.sendTime,

                    signTime = sOrder.signTime,

                    completeTime = sOrder.completeTime,

                    refundTime = sOrder.refundTime,

                    pullTotal = sOrder.pullTotal,

                    productId = sOrder.productId,

                    productTypeId = sOrder.productTypeId,

                    platformId = sOrder.platformId,

                    financialstatus = sOrder.financialstatus,

                    financialTime = sOrder.financialTime,

                    warehouseName = sOrder.warehouseName,

                    expressNumber = sOrder.expressNumber,

                    payedAmountType = sOrder.payedAmountType,

                    expressName = sOrder.expressName,

                    hlOrderTime = sOrder.hlOrderTime,

                    logisticsstatus = sOrder.logisticsstatus,

                    uploadTime = sOrder.uploadTime,

                    paymentStatus = sOrder.paymentStatus,

                    paymentStatusTime = sOrder.paymentStatusTime,

                    shippingPhone = sOrder.shippingPhone,

                    pass = sUser.pass,

                    out_trade_no = sOrder.out_trade_no,

                    expressTime = sOrder.expressTime,

                    advertisingId = sOrder.advertisingId,

                    newOrderTime = sOrder.newOrderTime,

                    interceptStatus = sOrder.interceptStatus,

                    adamount = sOrder.adamount,

                    regTime = sUser.createTime,

                    subOrderId = sOrder.subOrderId,

                    liveType = sOrder.liveType,

                    identifie = sOrder.identifie,

                    track_desc = sOrder.track_desc,

                    arriveInt = sOrder.arriveInt,

                    afterStatusListPer = sOrder.afterStatusListPer,

                    items = new List<CoreCmsOrderItem>()

                })

                .With(SqlWith.NoLock)

                .MergeTable()

                // ✅ 去掉 .Mapper(...)  ← 关键!

                .OrderByIF(orderByExpression != null, orderByExpression, orderByType)

                .WhereIF(predicate != null, predicate)

                .ToPageListAsync(pageIndex, pageSize, totalCount);

            // ✅ 2. 手动查 items(只查当前页的订单)

            if (page.Any())

            {

                var orderIds = page.Select(o => o.orderId).ToList();

                var allItems = await DbClient.Queryable<CoreCmsOrderItem>()

                    .Where(x => orderIds.Contains(x.orderId))

                    .ToListAsync();

                foreach (var order in page)

                {

                    order.items = allItems.Where(x => x.orderId == order.orderId).ToList();

                }

            }

            var list = new PageList<CoreCmsOrder>(page, pageIndex, pageSize, totalCount);

            return list;

        }


热忱回答0