群主还有方法可以优化这个方法性能吗 返回
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;
}