public ProductCategoryPageDTO GetDiscountProductPage(int pageNumber, int pageSize, ProductOrderType orderType) { Expression <Func <Product, object> > orderExp; switch (orderType) { case ProductOrderType.Name: orderExp = p => p.Name; break; case ProductOrderType.Price: orderExp = p => p.Price; break; default: orderExp = p => p.Name; break; } IEnumerable <Product> products = _dbContext.Products.Include(p => p.Page).Include(p => p.MainImage) .OrderBy(orderExp).Where(p => p.DiscountPrice > 0).Skip((pageNumber - 1) * pageSize).Take(pageSize); if (!products.Any()) { return(new ProductCategoryPageDTO()); } IMapper mapper = new MapperConfiguration(cfg => { cfg.CreateMap <Product, ProductPageDTO>() .ForMember(prodDTO => prodDTO.Alias, opt => opt.MapFrom(prod => prod.Page.Alias)); cfg.CreateMap <Image, ImageDTO>(); }).CreateMapper(); IEnumerable <ProductPageDTO> productsDTO = mapper.Map <IEnumerable <ProductPageDTO> >(products); ProductCategoryPageDTO discountPage = new ProductCategoryPageDTO { Products = productsDTO, Title = "Товары со скидкой", Name = "Товары со скидкой" }; discountPage.TotalItems = _dbContext.Products.Count(p => p.DiscountPrice > 0); return(discountPage); }
public ProductCategoryPageDTO GetProductCategoryPage(string categoryAlias, int pageNumber, int pageSize, ProductOrderType orderType) { Expression <Func <Product, object> > orderExp; switch (orderType) { case ProductOrderType.Name: orderExp = p => p.Name; break; case ProductOrderType.Price: orderExp = p => p.Price; break; default: orderExp = p => p.Name; break; } ProductCategory productCategory = _dbContext.ProductCategories.Include(pc => pc.Page) .FirstOrDefault(pc => pc.Page.Alias == categoryAlias); if (productCategory == null || productCategory.Page == null) { return(null); } //выполняется в отдельном зпросе так как невозможно сортировать и выборочно получать продукты в запросе, получающем категорию товаров IEnumerable <Product> products = _dbContext.Entry(productCategory).Collection(pc => pc.ProductToCategories).Query() .Include(ptc => ptc.Product).ThenInclude(p => p.MainImage).Include(ptc => ptc.Product).ThenInclude(p => p.Page) .Select(ptc => ptc.Product).OrderBy(orderExp).Skip((pageNumber - 1) * pageSize).Take(pageSize); IMapper categoryMapper = new MapperConfiguration(cfg => { cfg.CreateMap <ProductCategory, ProductCategoryPageDTO>() .ForMember(catDTO => catDTO.Alias, opt => opt.MapFrom(cat => cat.Page.Alias)) .ForMember(catDTO => catDTO.Description, opt => opt.MapFrom(cat => cat.Page.Description)) .ForMember(catDTO => catDTO.Title, opt => opt.MapFrom(cat => cat.Page.Title)); }).CreateMapper(); IMapper productMapper = new MapperConfiguration(cfg => { cfg.CreateMap <Product, ProductPageDTO>() .ForMember(prodDTO => prodDTO.Alias, opt => opt.MapFrom(prod => prod.Page.Alias)); cfg.CreateMap <Image, ImageDTO>(); }).CreateMapper(); ProductCategoryPageDTO productCategoryDTO = categoryMapper.Map <ProductCategoryPageDTO>(productCategory); IEnumerable <ProductPageDTO> productsDTO = productMapper.Map <IEnumerable <ProductPageDTO> >(products); productCategoryDTO.Products = productsDTO; productCategoryDTO.TotalItems = _dbContext.Entry(productCategory).Collection(pc => pc.ProductToCategories).Query().Count(); return(productCategoryDTO); }