private Expression <Func <Reserve, bool> > GenerateExpressionForSearch(ReserveSearchViewModel reserveSearch)
        {
            var searchHelper = new SearchHelper <Reserve>();

            if (reserveSearch.MinPrice != null)
            {
                searchHelper
                .AddAndExpression("Price", reserveSearch.MinPrice, ExpressionOperation.GreaterThanOrEqualTo);
            }

            if (reserveSearch.MaxPrice != null)
            {
                searchHelper
                .AddAndExpression("Price", reserveSearch.MaxPrice, ExpressionOperation.LessThanOrEqualTo);
            }

            if (reserveSearch.MinEntry != null)
            {
                searchHelper
                .AddAndExpression("Entry", reserveSearch.MinEntry, ExpressionOperation.GreaterThanOrEqualTo);
            }

            if (reserveSearch.MaxEntry != null)
            {
                searchHelper
                .AddAndExpression("Entry", reserveSearch.MaxEntry, ExpressionOperation.LessThanOrEqualTo);
            }

            if (reserveSearch.MinDateStart != null)
            {
                searchHelper
                .AddAndExpression("DateStart", reserveSearch.MinDateStart, ExpressionOperation.GreaterThanOrEqualTo);
            }

            if (reserveSearch.MaxDateStart != null)
            {
                searchHelper
                .AddAndExpression("DateStart", reserveSearch.MaxDateStart, ExpressionOperation.LessThanOrEqualTo);
            }

            if (reserveSearch.Enabled != null && !(bool)reserveSearch.Enabled)
            {
                searchHelper
                .AddAndExpression("DisabledAt", null, ExpressionOperation.NotEqualTo);
            }

            if (reserveSearch.Enabled != null && (bool)reserveSearch.Enabled)
            {
                searchHelper
                .AddAndExpression("DisabledAt", null);
            }

            return(searchHelper.BuildExpression());
        }
        public async Task <IEnumerable <ReserveViewModel> > Search([FromQuery] PaginationFilter paginationFilter, [FromQuery] ReserveSearchViewModel reserveSearch)
        {
            var exp      = GenerateExpressionForSearch(reserveSearch);
            var reserves = _mapper.Map <IEnumerable <ReserveViewModel> >(
                await _reserveRepository.FindWithItemsAndPagination(exp, paginationFilter.PageNumber, paginationFilter.PageSize)
                );

            return(reserves);
        }