public List <Film> SearchFilmsWithSettings(FilmsSearchSettings fss) { var query = string.IsNullOrWhiteSpace(fss.Query) ? Context.Films.AsQueryable() : Context.Films.Where(f => f.Title.Contains(fss.Query)); if (fss.IncludeActorsIDs.Count() != 0) { query = query.Where(f => f.Actors.Any(a => fss.IncludeActorsIDs.Contains(a.ID))); } if (fss.IncludeGenresIDs.Count() != 0) { query = query.Where(f => f.Genres.Any(g => fss.IncludeGenresIDs.Contains(g.ID))); } if (fss.ExcludeActorsIDs.Count() != 0) { query = query.Where(f => f.Actors.All(a => !fss.ExcludeActorsIDs.Contains(a.ID))); } if (fss.ExcludeGenresIDs.Count() != 0) { query = query.Where(f => f.Genres.All(g => !fss.ExcludeGenresIDs.Contains(g.ID))); } return(query.ToList()); }
// GET: Home/Search public ActionResult Search(FilmsSearchInfoContainer info) { var settings = new FilmsSearchSettings() { IncludeGenresIDs = info.IncludeGenres, IncludeActorsIDs = info.IncludeActors, ExcludeActorsIDs = info.ExcludeActors, ExcludeGenresIDs = info.ExcludeGenres, Query = info.Query }; return(View(FilmsDao.SearchFilmsWithSettings(settings) .Select(f => new FilmView(f)) .OrderBy(f => f.Title))); }