public async Task <IActionResult> AgeGroup(int year)
        {
            var race = await this.context.Races
                       .Include(x => x.AgeGroups)
                       .Include(x => x.RaceRunners)
                       .ThenInclude(x => x.Runner)
                       .Include(x => x.RaceRunners)
                       .ThenInclude(x => x.AgeGroup)
                       .Include(x => x.Results)
                       .ThenInclude(x => x.Runner)
                       .FirstAsync(x => x.Date.Year == year);

            var ageGroups = new List <AgeGroupResultsViewModel>();

            foreach (var ageGroup in race.AgeGroups)
            {
                var raceRunnerIds   = race.RaceRunners.Where(x => x.AgeGroup.Id == ageGroup.Id).Select(x => x.Runner.Id);
                var ageGroupResults = race.Results.Where(x => raceRunnerIds.Contains(x.Runner.Id));

                var results = new List <ResultViewModel>();

                foreach (var ageGroupResult in ageGroupResults)
                {
                    var res = new ResultViewModel
                    {
                        Place        = ageGroupResult.AgeGroupPlace,
                        Name         = $"{ageGroupResult.Runner.FirstName} {ageGroupResult.Runner.LastName}",
                        Gender       = ageGroupResult.Runner.Gender,
                        AgeGroupName = ageGroup.Name,
                        Time         = ageGroupResult.Time,
                        RaceName     = race.Name
                    };

                    results.Add(res);
                }

                var result = new AgeGroupResultsViewModel
                {
                    Name    = ageGroup.Name,
                    Gender  = ageGroup.Gender,
                    Results = results.OrderBy(x => x.Place).ToList()
                };

                ageGroups.Add(result);
            }

            var viewModel = new AgeGroupViewModel
            {
                Race      = race,
                AgeGroups = ageGroups.OrderBy(x => x.Gender).ThenBy(x => x.Name).ToList()
            };

            return(View(viewModel));
        }
        public ActionResult Create([Bind(Include = "Id,StartAge,EndAge,AgeCount,CovidCountId")] AgeGroupViewModel ageGroupCountVM)
        {
            if (ModelState.IsValid)
            {
                var ageGroupCount = new AgeGroupCount();
                var agedate       = DateTime.Parse(ageGroupCountVM.CovidCountId.ToString());
                ageGroupCount.CovidCountId = db.CovidCount.Single(c => c.Day == agedate).Id;
                ageGroupCount.AgeCount     = ageGroupCountVM.AgeCount;
                ageGroupCount.StartAge     = ageGroupCountVM.StartAge;
                ageGroupCount.EndAge       = ageGroupCountVM.EndAge;
                ageGroupCount.AgeCount     = ageGroupCountVM.AgeCount;

                db.AgeGroupCount.Add(ageGroupCount);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            ViewBag.CovidCountId = new SelectList(db.CovidCount, "Id", "Id", ageGroupCountVM.CovidCountId);
            return(View(ageGroupCountVM));
        }