Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }