public async Task <ActionResult <List <ProgressOut> > > GetSeries() { var email = GetEmail(); var series = await seriesRepository.GetSeriesByDatesAsync(email, DateTime.Now.AddMonths(-1), null); List <ProgressOut> p = new List <ProgressOut>(); foreach (var date in series.Select(d => d.ScheduleExercise.ScheduleTraining.TrainingDate).Distinct()) { foreach (var s in series.Where(w => w.ScheduleExercise.ScheduleTraining.TrainingDate == date).Select(s => s.ScheduleExercise).Distinct()) { var pr = new ProgressOut { Date = date.ToString("MM-dd"), Type = series.Where(ser => ser.ScheduleExercise.ScheduleTraining.TrainingDate == date && ser.ScheduleExerciseId == s.ScheduleExerciseId).Take(1).Select(select => select.ScheduleExercise.Exercise.Name).Single(), LoadAv = Math.Round(series.Where(ser => ser.ScheduleExercise.ScheduleTraining.TrainingDate == date && ser.ScheduleExerciseId == s.ScheduleExerciseId).Select(select => select.Load).Average(), 2), RepeatAv = Math.Round(series.Where(ser => ser.ScheduleExercise.ScheduleTraining.TrainingDate == date && ser.ScheduleExerciseId == s.ScheduleExerciseId).Select(select => select.Repeats).Average(), 2), TimeAv = Math.Round(series.Where(ser => ser.ScheduleExercise.ScheduleTraining.TrainingDate == date && ser.ScheduleExerciseId == s.ScheduleExerciseId).Select(select => select.Time).Average(), 2), RestTimeAv = Math.Round(series.Where(ser => ser.ScheduleExercise.ScheduleTraining.TrainingDate == date && ser.ScheduleExerciseId == s.ScheduleExerciseId).Select(select => select.RestTime).Average(), 2), DistanseAv = Math.Round(series.Where(ser => ser.ScheduleExercise.ScheduleTraining.TrainingDate == date && ser.ScheduleExerciseId == s.ScheduleExerciseId).Select(select => select.Distance).Average(), 2), }; p.Add(pr); } } return(p); }