linq 优化: var q1 = from a in DbGetIQueryableStoredEnergy_History join b in DbGetIQueryableEquipment_InfoWhereb = !bDeleted && bIsEnable && bEnterpriseId == enterpriseId on
优化建议:
- 将Db.GetIQueryable方法的调用提取到外部变量,避免在每个查询中都进行重复调用。
- 将第二个和第三个join语句的查询条件合并到一个where语句中,以提高查询效率。
- 将查询条件中的a.Deleted == false移动到where语句的最前面,以提前过滤掉不符合条件的记录。
- 在group by子句中,可以只选择需要的字段,而不是选择整个RecordTime对象。
- 将查询结果的属性名称改为小写字母开头,以符合命名规范。
优化后的代码如下所示:
var queryable = Db.GetIQueryable<StoredEnergy_History>(); var q1 = from a in queryable join b in Db.GetIQueryable<Equipment_Info>().Where(b => !b.Deleted && b.IsEnable && b.EnterpriseId == enterpriseId && b.EquipmentUseTypeId == Db.GetIQueryable<Equipment_UseType>().Where(c => !c.Deleted && c.IsEnable && c.UseTypeName == EquipmentUseType.总储能.ToString()).Select(c => c.Id)) on a.EquipmentId equals b.Id where !a.Deleted && a.RecordTime.Year == searchTime.Year group new { a.RecordTime, a.ThisChargingCapacity, a.ThisDischargeCapacity } by new { Year = a.RecordTime.Year, Month = a.RecordTime.Month, Day = a.RecordTime.Day } into g select new { Year = g.Key.Year, Month = g.Key.Month, Day = g.Key.Day, thisDischargeCapacity = g.Sum(p => p.ThisDischargeCapacity), thisChargingCapacity = g.Sum(p => p.ThisChargingCapacity) }
原文地址: https://www.cveoy.top/t/topic/hDBj 著作权归作者所有。请勿转载和采集!