public List <Product> GetProductByFilter(ProductFilterApiModel productFilterApiModel)
        {
            var result = _adventureEntitiesContext
                         .Products?
                         .WhereProduct(productFilterApiModel)?
                         .ToSortProduct(productFilterApiModel)
                         .ToList();

            return(result);
        }
        public IEnumerable <Product> GetProductByFilter(ProductFilterApiModel filterModel)
        {
            var result = _productManager.GetProductByFilter(filterModel);

            return(result.ToList());
        }
 public static IQueryable <Product> WhereProduct(this IQueryable <Product> product, ProductFilterApiModel filterModel)
 {
     return(product.Where(x => (x.ProductID == filterModel.Id && x.Name.Contains(filterModel.Name)) || x.ProductID == filterModel.Id || x.Name.Contains(filterModel.Name)));
 }
        public static IEnumerable <Product> ToSortProduct(this IEnumerable <Product> product, ProductFilterApiModel filter)
        {
            if (product == null)
            {
                return(product);
            }
            else
            {
                switch (filter.SortBy)
                {
                case "Id":
                    return(filter.SortDirection == "ASC" ? product.OrderBy(x => x.ProductID)
                            : product.OrderByDescending(x => x.ProductID));

                case "name":
                    return(filter.SortDirection == "ASC" ? product.OrderBy(x => x.Name)
                            : product.OrderByDescending(x => x.Name));

                case "cost":
                    return(filter.SortDirection == "ASC" ? product.OrderBy(x => x.StandardCost)
                            : product.OrderByDescending(x => x.StandardCost));

                default:
                    return(product.OrderBy(x => x.ProductID));
                }
            }
        }