示例#1
0
 public async Task <Result <IEnumerable <DeveloperRankingListDto> > > ListWorkProjectsAsync([FromQuery] DeveloperRankingSearchDto searchDto)
 {
     return(GetResult(await _developerService.ListDeveloperRankingAsync(searchDto)));
 }
示例#2
0
        public async Task <Result <IEnumerable <DeveloperRankingListDto> > > ListDeveloperRankingAsync(DeveloperRankingSearchDto searchDto)
        {
            var rawDeveloperList = await _developerRepository.Query()
                                   .Select(d => new {
                Developer = new { d.Id, d.Name },
                Works     = d.DeveloperProjects
                            .SelectMany(dp => dp.Works)
                            .Where(w => w.StartTime >= searchDto.StartTime)
                            .Where(w => searchDto.ProjectId == null || w.DeveloperProject.ProjectId == searchDto.ProjectId)
            })
                                   .ToArrayAsync();

            var rankingList = rawDeveloperList
                              .Select(d => new DeveloperRankingListDto
            {
                Id       = d.Developer.Id,
                Name     = d.Developer.Name,
                SumHours = d.Works.Sum(w => w.Hours),
                AvgHours = d.Works.Any() ? d.Works.Average(w => w.Hours) : 0
            })
                              .OrderByDescending(d => d.AvgHours)
                              .Take(5);

            return(new Result <IEnumerable <DeveloperRankingListDto> >(rankingList, rankingList.Count()));
        }