public CategoryDetailsDto GetMoviesByCategory(int id) { return(new CategoryDetailsDto() { Id = id, Name = _categoryRepository.GetById(id).Result.Name, Movies = _movieCategoryRepository.GetMoviesByCategory(id).ProjectTo <MovieDto>(_mapper.ConfigurationProvider).ToList() }); }
//------------------------------------------------------------------------------- private void Filter(MovieIndexDto moviesForIndex) { if (moviesForIndex.CategoriesIds.Length != 0) { foreach (var category in moviesForIndex.CategoriesIds) { var moviesWithCategory = _movieCategoryRepository.GetMoviesByCategory(category).ProjectTo <MovieDto>(_mapper.ConfigurationProvider).AsEnumerable(); moviesForIndex.Movies = moviesForIndex.Movies.Intersect(moviesWithCategory, new MovieDtoComparer()); } } var filter = moviesForIndex.Movies.Where(m => m.ReleaseDate.Year >= moviesForIndex.YearMin && m.ReleaseDate.Year <= moviesForIndex.YearMax); moviesForIndex.Movies = filter.Where(m => m.Reviews.Any()) .Where(m => m.Reviews .Average(m => m.Grade) >= moviesForIndex.GradeMin && m.Reviews .Average(m => m.Grade) < moviesForIndex.GradeMax + 1); if (moviesForIndex.GradeMin == 0) { moviesForIndex.Movies = moviesForIndex.Movies.Union(filter.Where(m => m.Reviews.Any() == false)); } }