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