private static DailyUsage GetDailyUsageImproved(DateTime yesterday) { yesterday = yesterday.Date; var today = yesterday.AddDays(1); var todayRecords = GetP1RecordsForDay(today); var yesterdayRecords = GetP1RecordsForDay(yesterday); var dayBeforeYesterdayRecords = GetP1RecordsForDay(yesterday.AddDays(-1)); var yesterdayLocal = yesterday.AddHours(12).ToLocalTime().Date; var todayLocal = yesterdayLocal.AddDays(1); var records = dayBeforeYesterdayRecords.Concat(yesterdayRecords).Concat(todayRecords); var improved = P1Improved.FromP1Records(records).ToArray(); var firstRecord = improved.First(p1I => p1I.DateTime >= yesterdayLocal); var lastRecord = improved.First(p1I => p1I.DateTime >= todayLocal); var usageTotal = Usage.FromRecords(firstRecord, lastRecord); var range = Enumerable.Range(0, 25).ToArray(); var hours = range.Select(i => yesterdayLocal.AddHours(i)).ToArray(); var hourRecords = hours.Select(h => improved.First(p1I => p1I.DateTime >= h)).ToArray(); var hourly = range.Skip(1).Select(r => new Usage { kWh = hourRecords[r].kWhTotal - hourRecords[r - 1].kWhTotal, M3 = hourRecords[r].M3Total - hourRecords[r - 1].M3Total, }).ToArray(); var dailyUsage = new DailyUsage { Total = usageTotal, Day = yesterday, Hourly = hourly }; return(dailyUsage); }