public SearchModel(IShopRepository repository, int langId, int? page, string categoryName = null, string productName = null, string articleName = null, string filter = null, string query = null, string sortOrder = null, string sortBy = null, bool showSpecialOffers = false) : base(repository, langId, "category", showSpecialOffers) { _repository = repository; IQueryable<Product> products = null; if (query != null && query.Length > 1) { products = _repository.GetProductsByQueryString(query).Where(p => p.ProductStocks.Any(ps => ps.IsAvailable)); } else { products = _repository.GetProductsByCategory(""); } switch (sortOrder) { case "desc": products = products.OrderByDescending(p => p.Price).ThenBy(p => p.Name).AsQueryable(); break; case "asc": products = products.OrderBy(p => p.Price).ThenBy(p => p.Name).AsQueryable(); break; default: // "abc" products = products.OrderBy(p => p.Name).AsQueryable(); break; } var pageSize = int.Parse(SiteSettings.GetShopSetting("ProductsPageSize")); Products = products.Include(x => x.ProductAttributeValues) .Include(x => x.ProductImages) .ToList(); ProductTotalCount = Products.Count(); if (page > Products.Count() / pageSize) { page = 0; } Products = ApplyPaging(Products.AsQueryable(), page, pageSize).ToList(); foreach (var product in Products) { product.CurrentLang = langId; if (product.ProductImages.Any()) { var pi = product.ProductImages.FirstOrDefault(c => c.IsDefault) ?? product.ProductImages.First(); product.ImageSource = pi.ImageSource; } } _sw.Stop(); Log.DebugFormat("SiteModel+SearchModel: {0}", _sw.Elapsed); }