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);
            }
        }
Exemplo n.º 2
0
        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);
        }