private async void Calculate() { if ((Until - Since).TotalDays <= 0) { return; } ResponseModel response = await _pk.GetSessionsInPeriod(_userId, Since, Until); List <ParkingSession> sessions = new List <ParkingSession>((List <ParkingSession>)response.Data); TimeSpan ts = Until - Since; const int hr = 24; List <KeyValuePair <int, double> > result = new List <KeyValuePair <int, double> >(); for (int i = 0; i < hr; i++) { List <ParkingSession> tmpPs = sessions.FindAll(ps => ps.PaymentDt != null && ps.ExitDt != null); int fromPast = tmpPs.Count(ps => ps.EntryDt.Hour == i || ps.ExitDt.Value.Hour == i); int fromActive = sessions.Count(ps => ps.PaymentDt != null && ps.ExitDt == null); double rate = (fromPast + fromActive) / (ts.TotalDays + 1); result.Add(new KeyValuePair <int, double>(i, rate)); } Statistics = result; }