Я представляю, что ваша проблема (я не совсем уверен, в чем ваша проблема, но это то, что мне нравится) - в строках
foreach (int GenreID in SelectedGenres)
{
//need to query where there's at least one genre, not all
//EX.Western and Horror selected should return movies that have either western or horror as a genre, not both.
query = query.Where(r => r.Genres.Any(x => x.GenreID == GenreID));
}
поскольку вы перезаписываете запрос результатами запроса. Где (). Возможно, что-то подобное будет работать вместо вас, поскольку вы будете сохранять результаты каждого запроса. Где () в ваш возвращенный список, а не перезаписывать запрос результатами запроса. Где ().
foreach (int GenreID in SelectedGenres)
{
//saving the results of each query.Where call to the SelectedMovies List
SelectedMovies.AddRange(query.Where(r => r.Genres.Any(x => x.GenreID == GenreID)).ToList());
}