在有GroupBy的情况下==自动转成 in,联表查询时使用该条件会报错误(非我配置问题)、单表查询无错误 返回

SqlSugar 沟通中
1 428
var query = await poChargeOrderServices.Queryable()
    .LeftJoin<PoPayTrade>((chargeOrder, payTrade) => chargeOrder.chargeOrderId == payTrade.orderId && payTrade.orderType == (byte)OrderTypeEnum.ChargingOrder && (payTrade.paymentType == (byte)PaymentTypeEnum.AccountBalance) && payTrade.state == (byte)PoPayTradeEnum.State.Paid)
  .Where((chargeOrder, payTrade) => 
	  chargeOrder.chargeWay == (byte)PoChargeOrderEnum.ChargeWay.Scan &&
	 (
		(chargeOrder.chargeEndTime >= startTime && chargeOrder.chargeEndTime <= endTime) ||
		//此方法性能差,慢了不止7秒
		//SqlFunc.Subqueryable<PoChargeOrderExt>().Where(ws => ws.chargeOrderId == chargeOrder.chargeOrderId && ws.cancelTime >= startTime && ws.cancelTime <= endTime).Any()

		//【联表时,组件有bug】GroupBy(g=> g.chargeOrderId) 必加,不然不会生成 id in(select id)
		chargeOrder.chargeOrderId == SqlFunc.Subqueryable<PoChargeOrderExt>().Where(ws => ws.cancelTime >= startTime && ws.cancelTime <= endTime).GroupBy(g => g.chargeOrderId).Select(s => s.chargeOrderId)
	 ) && 
	 chargeOrder.payStatus == (byte)PoRchOrderEnum.PayStatus.Paid && chargePayState.Contains(chargeOrder.state))
 .GroupBy((chargeOrder, payTrade) => new { chargeOrder.merchantId, chargeOrder.pileId, chargeOrder.parkId, payTrade.paymentType })
 .Select((chargeOrder, payTrade) => new
 {
	chargeOrder.merchantId,
	chargeOrder.pileId,
	chargeOrder.parkId,
	payTrade.paymentType,

	pileName = SqlFunc.AggregateMax(chargeOrder.pileName),
	category = SqlFunc.AggregateMax(chargeOrder.category),
	pileNo = SqlFunc.AggregateMax(chargeOrder.pileNo),
	pileCode = SqlFunc.AggregateMax(chargeOrder.pileCode),
	parkName = SqlFunc.AggregateMax(chargeOrder.parkName),
	payAmount = SqlFunc.AggregateSumNoNull<decimal>(SqlFunc.IF(payTrade.paymentType != (byte)PaymentTypeEnum.AccountBalance || payTrade.paymentName != z02Name).Return(payTrade.payAmount).End(0)), //支付金额
	giftAmt = SqlFunc.AggregateSumNoNull<decimal>(SqlFunc.IF(payTrade.paymentType == (byte)PaymentTypeEnum.AccountBalance && payTrade.paymentName == z02Name).Return(payTrade.payAmount).End(0)), //赠送金额支付
 })
.MergeTable()
.Where(itw => itw.paymentType > 0)
.ToListAsync();


热忱回答1

  • 这种需要DEMO删 掉OBJ和BIN打包上传。

    0 回复