/// <summary>
        /// Retrieve the players by a sort filter and limiting the amount we take by
        /// calling paging extention method
        /// </summary>
        /// <param name="sortChoice"></param>
        /// <param name="pageNumber"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        public List <Player> SortPlayerBy(int sortChoice, int pageNumber, int pageSize, out int count)
        {
            IQueryable <Player> query;
            SortCategories      category = (SortCategories)sortChoice;

            switch (category)
            {
            case SortCategories.Rating:
                query = db.Players.OrderByDescending(x => x.Rating.Overall).Include(r => r.Rating).Include(i => i.Image);
                count = query.Count();
                return(query.Page(pageNumber, pageSize).ToList());

            case SortCategories.Worth:
                query = db.Players.OrderByDescending(x => x.MaxWorth).Include(r => r.Rating).Include(i => i.Image);
                count = query.Count();
                return(query.Page(pageNumber, pageSize).ToList());

            case SortCategories.Speed:
                query = db.Players.OrderByDescending(x => x.Rating.Pace).Include(r => r.Rating).Include(i => i.Image);
                count = query.Count();
                return(query.Page(pageNumber, pageSize).ToList());

            case SortCategories.Shooting:
                query = db.Players.OrderByDescending(x => x.Rating.Shooting).Include(r => r.Rating).Include(i => i.Image);
                count = query.Count();
                return(query.Page(pageNumber, pageSize).ToList());

            case SortCategories.Dribble:
                query = db.Players.OrderByDescending(x => x.Rating.Dribbling).Include(r => r.Rating).Include(i => i.Image);
                count = query.Count();
                return(query.Page(pageNumber, pageSize).ToList());

            case SortCategories.Defender:
                query = db.Players.OrderByDescending(x => x.Rating.Defense).Include(r => r.Rating).Include(i => i.Image);
                count = query.Count();
                return(query.Page(pageNumber, pageSize).ToList());

            case SortCategories.Strongest:
                query = db.Players.OrderByDescending(x => x.Rating.Physical).Include(r => r.Rating).Include(i => i.Image);
                count = query.Count();
                return(query.Page(pageNumber, pageSize).ToList());

            default:
                query = db.Players.Include(r => r.Rating).Include(i => i.Image);
                count = query.Count();
                return(query.Page(pageNumber, pageSize).ToList());
            }
        }
        public ActionResult ProductList(int?subId, SortCategories sortBy = SortCategories.All, int page = 1, int pageSize = 4)
        {
            if (subId == null)
            {
                return(HttpNotFound());
            }
            IEnumerable <Product> pro = manager.GetProducts().Where(p => p.SubCategoryId == subId);

            switch (sortBy)
            {
            case SortCategories.Name:
                pro = pro.OrderBy(p => p.Name);
                break;

            case SortCategories.PriceHigh:
                pro = pro.OrderByDescending(p => p.Price);
                break;

            case SortCategories.PriceLower:
                pro = pro.OrderBy(p => p.Price);
                break;

            case SortCategories.Reviews:
                pro.ToList();
                break;

            case SortCategories.BestShiping:
                pro.ToList();
                break;

            default:
                pro.ToList();
                break;
            }
            List <ProductStoreViewModel> prod = pro
                                                .Skip((page - 1) * pageSize)
                                                .Take(pageSize)
                                                .Select(p => new ProductStoreViewModel
            {
                Name             = p.Name,
                ShortDescription = p.Description,
                LongDescription  = p.LongDescription,
                Price            = p.Price,
                Path             = p.Images.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).First(),
                ProductID        = p.Id,
                SubCategoryId    = p.SubCategoryId.Value,
            }).ToList();
            int totalCount = pro.Count();
            var products   = ListExtensions.ToPaginatedList(prod, page, pageSize, totalCount);
            ProductsListViewModel model = new ProductsListViewModel
            {
                ProductList = products,
                pageSizes   = new List <SelectListItem>
                {
                    new SelectListItem {
                        Text = "4", Value = "4"
                    },
                    new SelectListItem {
                        Text = "8", Value = "8"
                    },
                    new SelectListItem {
                        Text = "12", Value = "12"
                    },
                    new SelectListItem {
                        Text = "24", Value = "24"
                    },
                },
                CurrentSubCategoryId = subId.Value,
                SubCategoryName      = manager.GetSubCategoryById(subId.Value).Name,
                CurrentPage          = products.PageIndex
            };

            if (Request.IsAjaxRequest())
            {
                return(PartialView("_PartialProductList", model));
            }
            return(View(model));
        }