public ActionResult RaceResults(RaceResultsViewModel viewModel) { try { var regionalResults = new List <RegionResultViewModel>(); var overallResults = new RegionResultViewModel(); //get all results for the given race var allRegionsResults = raceResultsService.GetAggregatedRaceResults(viewModel.RaceID, null).ToList(); var regions = raceResultsService.GetRegions().Where(r => r.TopLevel == true).ToList(); //get all toplevel regions Mapper.CreateMap <Models.AggregatedRaceResult, ViewModels.AggregatedRaceResultViewModel>(); //get result per region foreach (var region in regions) { var regionresult = new RegionResultViewModel(); regionresult.Region = new RegionViewModel { RegionID = region.RegionID, RegionCode = region.RegionCode, Name = region.Name }; regionresult.Results = Mapper.Map <List <Models.AggregatedRaceResult>, List <ViewModels.AggregatedRaceResultViewModel> > (allRegionsResults.Where(rr => rr.RegionCode.ToLower() == region.RegionCode.ToLower()).ToList()); regionresult.Winner = regionresult.Results.OrderByDescending(rr => rr.TotalVotes).FirstOrDefault(); regionalResults.Add(regionresult); } // overall results // aggregate for all regions var aggResults = allRegionsResults.GroupBy(r => r.PartyAcronym) .Select(r => { AggregatedRaceResult aggregatedRaceResult = r.FirstOrDefault(); return(new { PartyAcronym = r.Key , aggregatedRaceResult.RegionID , aggregatedRaceResult.RegionCode , aggregatedRaceResult.RegionName , aggregatedRaceResult.RaceID, CandidateID = aggregatedRaceResult.CandidateId, aggregatedRaceResult.FirstName, aggregatedRaceResult.LastName, aggregatedRaceResult.MiddleName, aggregatedRaceResult.PartyName, aggregatedRaceResult.PartyColor, TotalVotes = r.Sum(p => p.TotalVotes), }); }).ToList(); overallResults.Results = new List <AggregatedRaceResultViewModel>(); foreach (var aggResult in aggResults) { overallResults.Results.Add(new AggregatedRaceResultViewModel { PartyAcronym = aggResult.PartyAcronym, RegionID = aggResult.RegionID, RegionCode = aggResult.RegionCode, RegionName = aggResult.RegionName, RaceID = aggResult.RaceID, CandidateID = aggResult.CandidateID, TotalVotes = aggResult.TotalVotes.Value, FirstName = aggResult.FirstName, LastName = aggResult.LastName, MiddleName = aggResult.MiddleName, PartyName = aggResult.PartyName, PartyColor = aggResult.PartyColor, }); } var allResults = new RaceResultsViewModel { RegionalResults = regionalResults, SelectedRegionResults = string.IsNullOrEmpty(viewModel.RegionCode) ? overallResults : regionalResults.FirstOrDefault(rr => rr.Region.RegionCode == viewModel.RegionCode) }; return(Json(allResults, JsonRequestBehavior.AllowGet)); } catch (Exception ex) { return(Json(new { Message = ex.Message, StackTrace = ex.StackTrace, InnerException = ex.InnerException.Message })); } }
public IEnumerable <AggregatedRaceResult> GetRaceResults(int id) { var result = (List <AggregatedRaceResult>)_raceResultRepository.GetAggregatedRaceResults(id, null); return(result); }