public List <DatabasePerHourStat> CalculateHourlyAverages(List <DateTime> hoursToCalulate) { List <DatabasePerHourStat> perHourStats = new List <DatabasePerHourStat>(); DatabasePerHourStat hourStat = null; List <DatabasePerSecondStat> tempAllSecondsInHour = null; int minPeopleInHour = -1; int maxPeopleInHour = -1; int tempSum = 0; foreach (DateTime hour in hoursToCalulate) { tempAllSecondsInHour = _dbQueryService.GetAllSecondsForHour(hour); if (tempAllSecondsInHour.Count != 3600) { // Write to log that this hour is missing PerSecondStats. return(null); } minPeopleInHour = tempAllSecondsInHour.First().NumDetectedObjects; maxPeopleInHour = tempAllSecondsInHour.First().NumDetectedObjects; tempSum = 0; // Calculate average, min and max. Create DatabasePerHourStat. foreach (DatabasePerSecondStat second in tempAllSecondsInHour) { tempSum += second.NumDetectedObjects; if (second.NumDetectedObjects < minPeopleInHour) { minPeopleInHour = second.NumDetectedObjects; } if (second.NumDetectedObjects > maxPeopleInHour) { maxPeopleInHour = second.NumDetectedObjects; } } hourStat = new DatabasePerHourStat { Day = DateTimeTools.GetHourBeginning(hour), Hour = hour.Hour, AverageDetectedObjects = (tempSum / tempAllSecondsInHour.Count), MaximumDetectedObjects = maxPeopleInHour, MinimumDetectedObjects = minPeopleInHour }; perHourStats.Add(hourStat); } return(perHourStats); }