コード例 #1
0
        public async Task <PaginatedListResult <Product> > Search(ProductsRequestViewModel viewModel)
        {
            IQueryable <Product> SearchFilter(IQueryable <Product> queryInner)
            {
                return(queryInner);
            }

            IQueryable <Product> SearchSort(IQueryable <Product> queryInner)
            {
                string sortName = viewModel.SortName?.ToUpper();

                if (sortName == ProductsRequestViewModel.OrderFields.ProductName)
                {
                    queryInner = queryInner.OrderUsingSearchOptions(viewModel, x => x.Name);
                }
                else if (sortName == ProductsRequestViewModel.OrderFields.Code)
                {
                    queryInner = queryInner.OrderUsingSearchOptions(viewModel, x => x.Code);
                }
                else if (sortName == ProductsRequestViewModel.OrderFields.EanCode)
                {
                    queryInner = queryInner.OrderUsingSearchOptions(viewModel, x => x.EanCode);
                }
                else if (sortName == ProductsRequestViewModel.OrderFields.SellPriceBruto)
                {
                    queryInner = queryInner.OrderUsingSearchOptions(viewModel, x => x.Price);
                }
                else if (sortName == ProductsRequestViewModel.OrderFields.Type)
                {
                    queryInner = queryInner.OrderUsingSearchOptions(viewModel, x => x.ProductType);
                }
                else if (sortName == ProductsRequestViewModel.OrderFields.ProductGroup)
                {
                    queryInner = queryInner.Include(x => x.ProductCategory).OrderUsingSearchOptions(viewModel, x => x.ProductCategory.Name);
                }
                else
                {
                    queryInner = queryInner.OrderBy(x => x.Id);
                }
                return(queryInner);
            }

            if (viewModel == null)
            {
                throw new ArgumentNullException(nameof(viewModel));
            }

            var query = BaseQuery();

            query = SearchFilter(query);
            query = SearchSort(query);

            return(await query.ToPaginatedListResultAsync(viewModel));
        }
コード例 #2
0
 public async Task <IActionResult> Search([FromQuery] ProductsRequestViewModel viewModel)
 => await HandleResultAsync(() => _service.Search(viewModel));
コード例 #3
0
        public async Task <ServiceResult <PaginatedListResult <ProductsResponseViewModel> > > Search(ProductsRequestViewModel viewModel)
        {
            var paginatedListWithModel = await _repository.Search(viewModel);

            // Mapping
            List <ProductsResponseViewModel> Mapping(List <Product> list)
            {
                return(list?
                       .Select(model => new ProductsResponseViewModel
                {
                    Id = model.Id,
                    ProductName = model.Name,
                    Code = model.Code,
                    EanCode = model.EanCode,
                    SellPriceBruto = model.Price,
                    Type = model.ProductType,
                    ProductGroup = model.ProductCategory?.Name
                })
                       .ToList());
            }

            var paginatedListWithViewModel = paginatedListWithModel.Copy(Mapping);

            return(ServiceResultFactory.Success(paginatedListWithViewModel));
        }