public async Task <ICollection <AnimeComparisonEntryDto> > GetAnimeComparison(AnimeComparisonSearchCriteria searchCriteria) { ICollection <AnimeComparisonEntry> partialResults = new List <AnimeComparisonEntry>(); for (int i = 0; i < searchCriteria.AnimeMalId.Count; i++) { var roles = await roleRepository.GetAllAsync(x => x.AnimeId.Equals(searchCriteria.AnimeMalId.ToArray()[i]) && x.LanguageId == 1, roleRepository.IncludeExpression); foreach (var role in roles) { if (partialResults.Any(x => x.Seiyuu.MalId.Equals(role.SeiyuuId))) { var foundSeiyuu = partialResults.Single(x => x.Seiyuu.MalId.Equals(role.SeiyuuId)); if (foundSeiyuu.AnimeCharacters.Any(x => x.Anime.MalId.Equals(role.AnimeId))) { var foundAnime = foundSeiyuu.AnimeCharacters.Single(x => x.Anime.MalId.Equals(role.AnimeId)); foundAnime.Characters.Add(role.Character); } else { foundSeiyuu.AnimeCharacters.Add(new AnimeComparisonSubEntry(role.Character, role.Anime)); } } else { AnimeComparisonEntry newComparisonEntry = new AnimeComparisonEntry { Seiyuu = role.Seiyuu }; newComparisonEntry.AnimeCharacters.Add(new AnimeComparisonSubEntry(role.Character, role.Anime)); partialResults.Add(newComparisonEntry); } } partialResults = partialResults.Where(x => x.AnimeCharacters.Select(y => y.Anime).ToList().Count >= i + 1).ToList(); } return(mapper.Map <ICollection <AnimeComparisonEntryDto> >(partialResults)); }
public async Task <ICollection <AnimeComparisonEntryDto> > HandleAsync(CompareAnimeQuery query) { ICollection <AnimeComparisonEntry> partialResults = new List <AnimeComparisonEntry>(); for (int i = 0; i < query.AnimeMalIds.Count; i++) { var roles = await _roleRepository.GetAllRolesInAnimeByMalIdAsync(query.AnimeMalIds.ElementAt(i)); foreach (var role in roles) { if (partialResults.Any(x => x.Seiyuu.Id.Equals(role.SeiyuuId))) { var foundSeiyuu = partialResults.Single(x => x.Seiyuu.Id.Equals(role.SeiyuuId)); if (foundSeiyuu.AnimeCharacters.Any(x => x.Anime.Id.Equals(role.AnimeId))) { var foundAnime = foundSeiyuu.AnimeCharacters.Single(x => x.Anime.Id.Equals(role.AnimeId)); foundAnime.Characters.Add(role.Character); } else { foundSeiyuu.AnimeCharacters.Add(new AnimeComparisonSubEntry(role.Character, role.Anime)); } } else { AnimeComparisonEntry newComparisonEntry = new AnimeComparisonEntry { Seiyuu = role.Seiyuu }; newComparisonEntry.AnimeCharacters.Add(new AnimeComparisonSubEntry(role.Character, role.Anime)); partialResults.Add(newComparisonEntry); } } partialResults = partialResults.Where(x => x.AnimeCharacters.Select(y => y.Anime).ToList().Count >= i + 1).ToList(); } return(partialResults.Select(x => x.ToAnimeComparisonEntryDto()).ToList()); }
public static AnimeComparisonEntryDto ToAnimeComparisonEntryDto(this AnimeComparisonEntry animeComparisonEntryDto) => new AnimeComparisonEntryDto( animeComparisonEntryDto.Seiyuu?.ToSeiyuuTableEntry(), animeComparisonEntryDto.AnimeCharacters?.Select(x => x.ToAnimeComparisonSubEntryDto()).ToList() ?? new List<AnimeComparisonSubEntryDto>() );