public IEnumerable <News> Find(NewsFindFilter filterModel) { if (filterModel == null) { throw new ArgumentNullException(nameof(filterModel)); } if (filterModel.Count <= 0) { return(Enumerable.Empty <News>()); } var filter = PredicateBuilder.New <News>(n => true); if (filterModel.MainCategories != null) { filter = filter.And(n => filterModel.MainCategories.Contains(n.Category.Title)); } if (filterModel.SubCategories != null) { filter = filter.And(n => filterModel.SubCategories.Any(c => n.Category.SubCategories.Contains(c))); } if (filterModel.Sources != null) { filter = filter.And(n => filterModel.Sources.Contains(n.Source.SiteTitle)); } if (filterModel.KeyWord != null) { filter = filter.And(n => n.Title.Contains(filterModel.KeyWord) || n.Text.Contains(filterModel.KeyWord)); } if (filterModel.From != null) { filter = filter.And(n => n.CreatedDate >= filterModel.From); } if (filterModel.To != null) { filter = filter.And(n => n.CreatedDate <= filterModel.To); } var news = _newsRepository.Read(filter) .OrderByDescending(n => n.CreatedDate) .Skip(filterModel.Skip) .Take(filterModel.Count) .ToList(); return(news); }
public IActionResult Search([FromQuery] NewsFindFilter filter) { var news = _newsService.Find(filter); return(Ok(news)); }