private Expression <Func <Game, bool> > GenerateRatingRangePredicate(GameSearchParametersDto gameSearchParametersDto) { if (gameSearchParametersDto.MinRating.HasValue && gameSearchParametersDto.MaxRating.HasValue) { return(GetMoreThanMinRatingExpression(gameSearchParametersDto.MinRating.Value).And(GetLessThanMaxRatingExpression(gameSearchParametersDto.MaxRating.Value))); } if (gameSearchParametersDto.MinRating.HasValue) { return(GetMoreThanMinRatingExpression(gameSearchParametersDto.MinRating.Value)); } if (gameSearchParametersDto.MaxRating.HasValue) { return(GetLessThanMaxRatingExpression(gameSearchParametersDto.MaxRating.Value)); } return(o => true); Expression <Func <Game, bool> > GetMoreThanMinRatingExpression(int minRating) { return(o => o.Rating >= minRating); } Expression <Func <Game, bool> > GetLessThanMaxRatingExpression(int maxRating) { return(o => o.Rating <= maxRating); } }
public async Task <JsonResult> Search(GameSearchParametersDto searchParameters) { return(new JsonResult(_gameQueryer.SearchGamesByPredicate(searchParameters))); }
public IEnumerable <GameDto> SearchGamesByPredicate(GameSearchParametersDto gameSearchParametersDto) { var predicate = _predicateGenerator.GeneratePredicate(gameSearchParametersDto).WithAdvancedPredicate(GenerateRatingRangePredicate(gameSearchParametersDto)).Compile(); return(_dataStore.GetGames().Where(predicate).ToGameDtos()); }