IList <AnalogHistoryHour> getHourData(DateTime startTime, DateTime endTime, int analogNo) { try { //获取该测点每小时读数 IList <AnalogHistoryHour> historyList = analogHistoryRepos.getHourEnergyHistoryByAnalogNo(analogNo, startTime, endTime); IList <AnalogHistoryHour> hourList = new List <AnalogHistoryHour>(); int count = 0; //填补缺失时间点读数,将值设为0.0 for (DateTime tmp = startTime; tmp < endTime; tmp = tmp.AddHours(1)) { if (count >= historyList.Count || historyList[count].AHH_HTime != tmp) { AnalogHistoryHour ahh = new AnalogHistoryHour(); ahh.AHH_AnalogNo = analogNo; ahh.AHH_HTime = tmp; ahh.AHH_Value = 0.0; hourList.Add(ahh); } else { hourList.Add(historyList[count]); count++; } } return(hourList); } catch (Exception ex) { log.write("Func:getHourData:" + ex.StackTrace); return(null); } }
public IList <AnalogHistoryHour> getHourEnergyHistoryByAnalogNo(int analogNo, DateTime startTime, DateTime endTime) { IList <AnalogHistoryHour> result = new List <AnalogHistoryHour>(); try { var tempQuery = from ah in dataEntities.AnalogHistory where ah.AH_AnalogNo == analogNo && ah.AH_Time >= startTime && ah.AH_Time <= endTime select new { PNO = ah.AH_AnalogNo, Time = new DateTime(ah.AH_Time.Year, ah.AH_Time.Month, ah.AH_Time.Day, ah.AH_Time.Hour, 0, 0), Val = ah.AH_Value }; var resultQuery = from ah1 in tempQuery group ah1.Val by new { ah1.PNO, ah1.Time } into g orderby g.Key.Time select new HourEntity { AnalogNo = g.Key.PNO, AnalogTime = g.Key.Time, value = g.Max() }; IList <HourEntity> tmpList = resultQuery.ToList(); for (int i = 0; i < tmpList.Count; i++) { AnalogHistoryHour ahh = new AnalogHistoryHour(); ahh.AHH_AnalogNo = tmpList[i].AnalogNo; ahh.AHH_HTime = tmpList[i].AnalogTime; ahh.AHH_Value = tmpList[i].value; result.Add(ahh); } } catch (Exception e) { log.write("Func:getHourEnergyHistoryByAnalogNo;" + e.StackTrace); } return(result); }