public FilterResultDTO GetFiltredGame(FilterDTO filterDto, SortTypes sortType, PageInfoDTO pageInfo) { Expression<Func<Game, bool>> pipeExpression = _pipelineFilter.Execute(GetFilters(filterDto)); IEnumerable<Game> filtredGames = _unitOfWork.Games.GetMany(pipeExpression); int allGamesNumber = filtredGames.Count(); filtredGames = SortGames(filtredGames, sortType); filtredGames = filtredGames.GetPage(pageInfo.ItemsPerPage, pageInfo.PageNumber); FilterResultDTO result = new FilterResultDTO { Games = filtredGames.Select(Mapper.Map<Game, GameDTO>), PagesNumber = (allGamesNumber%pageInfo.ItemsPerPage) == 0 ? (allGamesNumber/(pageInfo.ItemsPerPage)) : (allGamesNumber/pageInfo.ItemsPerPage) + 1 }; return result; }
private IEnumerable<IFilter> GetFilters(FilterDTO filterDto) { if (filterDto.Genres != null && filterDto.Genres.Any()) yield return new GenreFilter(filterDto.Genres); if (filterDto.PlatformTypes != null && filterDto.PlatformTypes.Any()) yield return new PlatformTypeFilter(filterDto.PlatformTypes); if (filterDto.Publishers != null && filterDto.Publishers.Any()) yield return new PublisherFilter(filterDto.Publishers); if (filterDto.From > 0.0m) yield return new FromPriceFilter(filterDto.From); if (filterDto.To > 0.0m) yield return new ToPriceFilter(filterDto.To); if (!string.IsNullOrEmpty(filterDto.Name)) yield return new NameFilter(filterDto.Name); if( filterDto.DateFilterType != 0 && filterDto.DateFilterType != DateFilterTypes.All ) yield return new DateFilter( (int)filterDto.DateFilterType ); }