public IEnumerable <ProductViewModel> Do(FilterProductsRequest request) { if (request.FilterOption == FilterOption.PRICE) { return(_productRepository.GetProductsByPrice(request.MinPrice.GetValueOrDefault(), request.MaxPrice, ModelMapper)); } if (request.FilterOption == FilterOption.STOCK) { return(_productRepository.GetProductsByQuantity(0, ModelMapper)); } if (request.FilterOption == FilterOption.RATING) { IEnumerable <int> products = _ratingRepository.GetProductIdsByTotalRating(request.MinRating.GetValueOrDefault(), request.MaxRating.GetValueOrDefault(), r => r.ProductId); return(_productRepository.GetProducts(p => products.Contains(p.Id), ModelMapper)); } if (request.FilterOption == FilterOption.WEIGHT) { return(_productRepository.GetProducts(p => p.Weight >= request.MinWeight.GetValueOrDefault() && p.Weight <= request.MaxWeight.GetValueOrDefault() , ModelMapper)); } if (request.FilterOption == FilterOption.CATEGORY) { return(_productRepository.GetProducts(p => p.CategoryId == request.CategoryId.GetValueOrDefault(), ModelMapper)); } if (request.FilterOption == FilterOption.PRODUCER) { return(_productRepository.GetProducts(p => p.ProducerId == request.ProducerId.GetValueOrDefault(), ModelMapper)); } return(new List <ProductViewModel>()); }