private IEnumerable <BLL.DTOs.Advertisement> FilterAdsByOption(IEnumerable <BLL.DTOs.Advertisement> ads, BLL.DTOs.Advertisement similarAd, FilterType option) { switch (option) { case FilterType.Price: return(ads.Where(a => a.Price >= similarAd.Price / 2 && a.Price <= similarAd.Price * 2)); case FilterType.County: return(ads.Where(a => a.City.County !.Name == similarAd.City.County !.Name)); case FilterType.City: return(ads.Where(a => a.City.Name == similarAd.City.Name)); case FilterType.Condition: return(ads.Where(a => a.Condition == similarAd.Condition)); case FilterType.ImportantProps: var importantProps = similarAd.AdvertisementProperties.Where(ap => ap.Property.IsImportant); return(AdvertisementFinder.FilterAdvertisementsByProperties(ads, importantProps)); case FilterType.OtherProps: var otherProps = similarAd.AdvertisementProperties.Where(ap => !ap.Property.IsImportant); return(AdvertisementFinder.FilterAdvertisementsByProperties(ads, otherProps)); case FilterType.User: return(ads.Where(a => similarAd.Seller == null ? similarAd.Customer == a.Customer : similarAd.Seller == a.Seller)); default: return(ads); } }
public async Task <List <Advertisement> > GetAdvertisementsAsync(SearchModel searchModel, int?adsToTake = null) { var dbAdvertisements = AdvertisementFinder.FilterAdvertisements(_context, searchModel); var resultAdvertisements = _mapper.Map <List <Advertisement> >(await dbAdvertisements.ToListAsync()); resultAdvertisements = await AdvertisementFinder.FilterAdvertisementsByCategory(_categoryService, searchModel.CategoryId, resultAdvertisements); resultAdvertisements = AdvertisementFinder.FilterAdvertisementsByProperties(resultAdvertisements, searchModel.PropertyInputs); if (adsToTake != null) { resultAdvertisements = resultAdvertisements.Take((int)adsToTake).ToList(); } return(resultAdvertisements); }