private IEnumerable <HistoryData> ReadFromFile(DateTime start, DateTime end) { int eyear = end.Year; int syear = start.Year; int emonth = end.Month; int smonth = start.Month; int year = syear; while (year <= eyear) { int month = (year == syear ? smonth : 1); while (month <= (year == eyear ? emonth : 12)) { var result = HDAIOHelper.LoadFromFile((year == syear && month == smonth ? start : new DateTime(year, month, 1)), (year == eyear && month == emonth ? end : new DateTime(year, month, 1).AddMonths(1).AddMilliseconds(-2)));//考虑按月遍历 if (result != null) { foreach (var data in result) { yield return(data); } } month++; } year++; } }
public IEnumerable <HistoryData> ReadRaw(DateTime start, DateTime end, short ID) { if (end < start) { return(null); } try { if (HDAIOHelper.FindFile(end) && (DateTime.Today > end.Date)) { return(ReadFromFile(start, end, ID)); } return(group.SendHdaRequest(start, end, ID)); } catch (Exception exp) { App.AddErrorLog(exp); return(null); } }
/// <summary> /// 从文件或者数据库中获取归档的数据 /// </summary> /// <param name="start"></param> /// <param name="end"></param> /// <returns></returns> private IEnumerable <HistoryData> GetHData(DateTime start, DateTime end) { if (start > end) { yield break; } DateTime now = DateTime.Now; if (start > now) { yield break; } if (end > now) { end = now; } //if (now.Date > start.Date) //{ // DateTime tempstart = DateTime.MinValue; // DateTime tempend = end; // HDAIOHelper.GetRangeFromDatabase(null, ref tempend, ref tempstart); // if (tempend > start) // { // int eyear = tempend.Year; // int syear = start.Year; // int emonth = tempend.Month; // int smonth = start.Month; // int year = syear; // while (year <= eyear) // { // int month = (year == syear ? smonth : 1); // while (month <= (year == eyear ? emonth : 12)) // { // var result = HDAIOHelper.LoadFromFile((year == syear && month == smonth ? start : new DateTime(year, month, 1)), // (year == eyear && month == emonth ? tempend : new DateTime(year, month, 1).AddMonths(1).AddMilliseconds(-2)));//考虑按月遍历 // if (result != null) // { // foreach (var data in result) // { // yield return data; // } // } // month++; // } // year++; // } // } //} var tempdata = _hda.ToArray(); DateTime ftime = (tempdata.Length > 0 ? tempdata[0].TimeStamp : DateTime.Now); if (start < ftime) { var result = HDAIOHelper.LoadFromDatabase(start, ftime > end ? end : ftime);//范围冲突 if (result != null) { foreach (var data in result) { yield return(data); } } } if (end > ftime) { var result = tempdata.Where(x => x.TimeStamp >= ftime && x.TimeStamp <= end); if (result != null) { foreach (var data in result) { yield return(data); } } } yield break; }