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)); }
public async Task <IActionResult> Search([FromQuery] ProductsRequestViewModel viewModel) => await HandleResultAsync(() => _service.Search(viewModel));
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)); }