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); }