private static Statistics GetStatistics(CarWasher carWasher) { try { var visitors = carWasher.GetAllVisitors(); var processedVisitors = visitors.Where(v => v.ProcessedOn.HasValue && v.Status == Enums.Enum.VisitorStatus.Processed); TimeSpan averageProcessingTime, averageTotalTime, averageWaitingTime; if (processedVisitors.Any()) { averageTotalTime = TimeSpan.FromMilliseconds(processedVisitors.Average(v => (v.ProcessedOn.Value - v.GeneratedOn).TotalMilliseconds)); averageWaitingTime = TimeSpan.FromMilliseconds(processedVisitors.Average(v => ((v.ProcessedOn.Value - v.GeneratedOn) - v.ProcessingDuration).TotalMilliseconds)); averageProcessingTime = averageTotalTime - averageWaitingTime; } var statistics = new Statistics { GeneratedVisitors = visitors.Count(), ProcessedVisitors = processedVisitors.Count(), RejectedVisitors = visitors.Count(v => v.Status == Enums.Enum.VisitorStatus.Rejected), AverageProcessingTime = averageProcessingTime, AverageTotalTime = averageTotalTime, AverageWaitingTime = averageWaitingTime }; return(statistics); } catch (Exception ex) { Console.WriteLine($"Error getting statistics. Exception: {ex.Message}"); return(null); } }