public async Task<PagedResult<SeasonSummaryEntryDto>> GetSeasonRolesSummary(Query<SeasonSummarySearchCriteria> query) { var seasonPredicate = seasonSearchCriteriaService.BuildExpression(mapper.Map<SeasonSearchCriteria>(query.SearchCriteria)); var foundSeason = await seasonRepository.GetAsync(seasonPredicate); if (foundSeason != null) { query.SearchCriteria.Id = foundSeason.Id; var animePredicate = animeSearchCriteriaService.BuildExpression(mapper.Map<AnimeSearchCriteria>(query.SearchCriteria)); var animeInSeason = await animeRepository.GetAllAsync(animePredicate); if (animeInSeason.Count > 0) { query.SearchCriteria.AnimeId = animeInSeason.Select(x => x.MalId).ToList(); var rolePredicate = roleSearchCriteriaService.BuildExpression(mapper.Map<RoleSearchCriteria>(query.SearchCriteria)); IReadOnlyCollection<Role> allRolesInSeason = await roleRepository.GetAllAsync(rolePredicate, roleRepository.IncludeExpression); return mapper.Map<PagedResult<SeasonSummaryEntryDto>>(GroupRoles(allRolesInSeason, query)); } } return null; }