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 })); }
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); }
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); }