public List <MovieDO> DoFilter(List <MovieDO> movieList, int userID) { //filter names if (string.IsNullOrEmpty(Name.FilterValue) == false) { var tempList = MovieListBL.SearchSuperblyForNames(Name.FilterValue).Select(q => q.ID); movieList = movieList.Where(q => tempList.Contains(q.ID)).ToList(); } //filter year if (string.IsNullOrEmpty(Year.FilterValue) == false) { int year = ParseHelper.ToInt32(Year.FilterValue); if (year > 0) { if (Year.FilterType == FilterTypes.Equals) { movieList = movieList.Where(q => q.Year.HasValue && q.Year.Value == year).ToList(); } if (Year.FilterType == FilterTypes.GreaterThanOrEqual) { movieList = movieList.Where(q => q.Year.HasValue && q.Year.Value >= year).ToList(); } if (Year.FilterType == FilterTypes.LessThanOrEqual) { movieList = movieList.Where(q => q.Year.HasValue && q.Year.Value <= year).ToList(); } } } //filter imdb rating if (string.IsNullOrEmpty(ImdbRating.FilterValue) == false) { double imdbRating = ParseHelper.ToDouble(ImdbRating.FilterValue); if (imdbRating > 0) { if (ImdbRating.FilterType == FilterTypes.Equals) { movieList = movieList.Where(q => q.ImdbRating.HasValue && q.ImdbRating.Value == imdbRating).ToList(); } if (ImdbRating.FilterType == FilterTypes.GreaterThanOrEqual) { movieList = movieList.Where(q => q.ImdbRating.HasValue && q.ImdbRating.Value >= imdbRating).ToList(); } if (ImdbRating.FilterType == FilterTypes.LessThanOrEqual) { movieList = movieList.Where(q => q.ImdbRating.HasValue && q.ImdbRating.Value <= imdbRating).ToList(); } } } //filter i have watched if (string.IsNullOrEmpty(IHaveWatched.FilterValue) == false) { string watchedStatus = IHaveWatched.FilterValue; if (watchedStatus != "All") { List <MovieUserRatingDO> usersRatings = MovieUserRatingBL.GetAllDOByUserID(userID); List <int> movieIds = usersRatings.Where(q => q.Watched == true).Select(q => q.MovieID).ToList(); if (watchedStatus == "No") { movieList.RemoveAll(q => movieIds.Contains(q.ID)); } else if (watchedStatus == "Yes") { movieList = movieList.Where(q => movieIds.Contains(q.ID)).ToList(); } } } //filter my rating if (string.IsNullOrEmpty(MyRating.FilterValue) == false) { double myRating = ParseHelper.ToDouble(MyRating.FilterValue); if (myRating > 0) { List <int> movieIdsForUsersRatings = new List <int>(); if (MyRating.FilterType == FilterTypes.Equals) { movieIdsForUsersRatings = MovieUserRatingBL.GetAllDOByUserID(userID).Where(q => q.Rating == myRating).Select(q => q.MovieID).ToList(); } if (MyRating.FilterType == FilterTypes.GreaterThanOrEqual) { movieIdsForUsersRatings = MovieUserRatingBL.GetAllDOByUserID(userID).Where(q => q.Rating >= myRating).Select(q => q.MovieID).ToList(); } if (MyRating.FilterType == FilterTypes.LessThanOrEqual) { movieIdsForUsersRatings = MovieUserRatingBL.GetAllDOByUserID(userID).Where(q => q.Rating <= myRating).Select(q => q.MovieID).ToList(); } movieList = movieList.Where(q => movieIdsForUsersRatings.Contains(q.ID)).ToList(); } } //filter movie types if (MovieType.Length > 0) { List <int> typeIds = new List <int>(); foreach (var item in MovieType) { typeIds.Add(ParseHelper.ToInt32(item)); } var allMoviesAndTypes = MovieTypeBL.GetAllDO().Where(q => typeIds.Contains(q.TypeID)); movieList = movieList.Join(allMoviesAndTypes, mList => mList.ID, allMovs => allMovs.MovieID, (mList, allMovs) => mList).ToList(); } return(movieList); }