public async Task <IActionResult> GetTopLiftInSlicedPeriod(DateTime startDate, DateTime endDate, int daysInSlice) { /* Validate input */ if (endDate <= startDate.AddDays(daysInSlice)) { return(BadRequest($"No {daysInSlice} days period between {startDate} and {endDate}")); } /* Separate period in slices and query them */ var queries = new List <Task <TopLiftInPeriod> >(); var currentDate = startDate; while (currentDate < endDate) { queries.Add(_workoutRepository.GetTopLiftInPeriod(currentDate, currentDate = currentDate.AddDays(daysInSlice))); } List <TopLiftInPeriod> liftInPeriods = (await Task.WhenAll(queries)).ToList(); return(Ok(liftInPeriods)); }