优化后的代码如下:

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)

优化linq: var q = from a in GetIQueryable join b in DbGetIQueryableEquipment_ChargingGunsInfo on aChargingGunId equals bId into tmp1 from bb in tmp1DefaultIfEmpty

原文地址: https://www.cveoy.top/t/topic/hIdg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录