优化linq: var q = from a in GetIQueryable join b in DbGetIQueryableEquipment_ChargingGunsInfo on aChargingGunId equals bId into tmp1 from bb in tmp1DefaultIfEmpty
优化后的代码如下:
var q = from a in GetIQueryable() join b in Db.GetIQueryable<Equipment_ChargingGunsInfo>() on a.ChargingGunId equals b.Id into tmp1 from bb in tmp1.DefaultIfEmpty() join c in Db.GetIQueryable<Equipment_ChargingPileInfo>() on bb.ChargingPileId equals c.Id into tmp2 from cc in tmp2.DefaultIfEmpty() where a.Deleted == false && bb.Deleted == false && bb.IsEnable == true && cc.Deleted == false && cc.IsEnable == true && cc.EnterpriseId == enterpriseId select new { a.ChargingBeginTime, a.ChargeCapacity, a.ServiceAmount };
decimal chargeCapacityYear = await q.Where(p => p.ChargingBeginTime >= startTimeYear && p.ChargingBeginTime <= endTimeYear).SumAsync(p => p.ChargeCapacity ?? 0); decimal chargeCapacityMonth = await q.Where(p => p.ChargingBeginTime >= startTimeMonth && p.ChargingBeginTime <= endTimeMonth).SumAsync(p => p.ChargeCapacity ?? 0); decimal chargeCapacityDay = await q.Where(p => p.ChargingBeginTime >= startTimeDay && p.ChargingBeginTime <= endTimeDay).SumAsync(p => p.ChargeCapacity ?? 0);
// 使用 AsNoTracking 来提高查询性能 q = q.AsNoTracking();
decimal chargeCapacityYear = await q.Where(p => p.ChargingBeginTime >= startTimeYear && p.ChargingBeginTime <= endTimeYear).SumAsync(p => p.ChargeCapacity ?? 0); decimal chargeCapacityMonth = await q.Where(p => p.ChargingBeginTime >= startTimeMonth && p.ChargingBeginTime <= endTimeMonth).SumAsync(p => p.ChargeCapacity ?? 0); decimal chargeCapacityDay = await q.Where(p => p.ChargingBeginTime >= startTimeDay && p.ChargingBeginTime <= endTimeDay).SumAsync(p => p.ChargeCapacity ?? 0)
原文地址: https://www.cveoy.top/t/topic/hIdg 著作权归作者所有。请勿转载和采集!