public async Task <IActionResult> GetSearchedCarsAsync(SearchCars query)
        {
            var lang   = LangCode;
            var result = await _carService.GetSearchedCarsAsync(query, lang);

            return(Ok(new { pageResult = result.Item1, pageCount = result.Item2 }));
        }
예제 #2
0
        public async Task <(IEnumerable <CarOutputDto>, int)> GetSearchedCarsAsync(SearchCars query, string lang)
        {
            var page     = query.Page ?? 1 - 1;
            var pageSize = query.PageSize ?? 10;
            var filter   = BuildExpression(query);

            var cars = await _carRepository.Queryable()
                       .Include(x => x.Color)
                       .Include(x => x.Fuel)
                       .Include(x => x.Owners)
                       .Where(filter)
                       .Skip(page * pageSize)
                       .Take(pageSize)
                       .AsNoTracking()
                       .ToListAsync();

            int carsCount = await _carRepository.CountAsync(filter);

            List <CarOutputDto> carInputDtos = new List <CarOutputDto>();

            foreach (var car in cars)
            {
                carInputDtos.Add(MapperCarToCarOutputDto(car, lang));
            }

            (IEnumerable <CarOutputDto>, int)result = (carInputDtos, carsCount);

            return(result);
        }
예제 #3
0
        private Expression <Func <Car, bool> > BuildExpression(SearchCars query)
        {
            Expression <Func <Car, bool> > expression = x => x.Id != default;

            if (query.Color != null)
            {
                expression = expression.And(x => x.Color.ColorName.ToLower().Contains(query.Color.ToLower()));
            }
            if (query.Fuel != null)
            {
                expression = expression.And(x => x.Fuel.Name.ToLower().Contains(query.Fuel.ToLower()));
            }
            if (query.MarkEng != null)
            {
                expression = expression.And(x => x.MarkEng.ToLower().Contains(query.MarkEng.ToLower()));
            }
            if (query.MarkGeo != null)
            {
                expression = expression.And(x => x.MarkGeo.ToLower().Contains(query.MarkGeo.ToLower()));
            }
            if (query.ModelGeo != null)
            {
                expression = expression.And(x => x.ModelGeo.ToLower().Contains(query.ModelGeo.ToLower()));
            }
            if (query.ModelEng != null)
            {
                expression = expression.And(x => x.ModelEng.ToLower().Contains(query.ModelEng.ToLower()));
            }
            if (query.OwnerId != null)
            {
                expression = expression.And(x => x.Owners.FirstOrDefault(o => o.Id == query.OwnerId) != null);
            }
            if (query.TransportNumber != null)
            {
                expression = expression.And(x => x.TransportNumber.ToLower().Contains(query.TransportNumber.ToLower()));
            }
            if (query.VinCode != null)
            {
                expression = expression.And(x => x.VinCode.ToLower().Contains(query.VinCode.ToLower()));
            }

            return(expression);
        }