private List <BLL.DTOs.Advertisement> FilterAds(int numberToShow, IEnumerable <BLL.DTOs.Advertisement> ads, BLL.DTOs.Advertisement similarAd)
        {
            IEnumerable <FilterType> filterOptions = new List <FilterType>()
            {
                FilterType.Price, FilterType.County, FilterType.City, FilterType.Condition, FilterType.ImportantProps, FilterType.OtherProps, FilterType.User
            };

            ads = ads.Where(a => a.Id != similarAd.Id);

            int i = 0;

            while (i < filterOptions.Count() && ads.Count() > numberToShow)
            {
                ads = FilterAdsByOption(ads, similarAd, filterOptions.ElementAt(i));
                i++;
            }
            return(ads.Take(numberToShow).ToList());
        }
        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);
            }
        }