public async Task <ScoringReport> GetScoringReportAsync(long projectId, bool showExperts = false) { var scoring = await _scoringRepository.GetByProjectIdAsync(projectId); if (scoring == null) { return(new ScoringReport { ScoringReportsInAreas = new ScoringReportInArea[0] }); } var result = new List <ScoringReportInArea>(); foreach (var areaScoring in scoring.AreaScorings) { var expertScorings = scoring.ExpertScorings.Where(x => x.Area == areaScoring.AreaId).ToArray(); var offers = scoring.ScoringOffers.Where(s => s.AreaId == areaScoring.AreaId).ToArray(); var statistics = new ScoringReportInArea(areaScoring.Score, areaScoring.ExpertsCount, expertScorings, offers, areaScoring.AreaId); result.Add(statistics); } var scoringExperts = showExperts ? await _expertRepository.GetByIdsAsync(scoring.ExpertScorings.Select(i => i.ExpertId).ToArray()) : null; return(new ScoringReport { Experts = scoringExperts, AcceptingDeadline = scoring.AcceptingDeadline, ScoringDeadline = scoring.ScoringDeadline, ScoringReportsInAreas = result }); }