public async Task <List <Movie> > GetRecommendedMovies(string userID) { MongoDBManager mm = new MongoDBManager(); List <Movie> movies = new List <Movie>(); Dictionary <ObjectId, int> similarMovies = new Dictionary <ObjectId, int>(); UserInformation user = await mm.GetUserInformation(userID); if (user == null) { return(movies); } foreach (var movieLike in user.MovieLikes) { List <UserInformation> users = mm.GetAllUsersWithExceptCurrent(userID, movieLike); foreach (var userFromDb in users) { foreach (var movie in userFromDb.MovieLikes) { if (!similarMovies.ContainsKey(movie.Id)) { similarMovies.Add(movie.Id, 0); } similarMovies[movie.Id]++; } } } var sortedSimilarMovies = from pair in similarMovies orderby pair.Value descending select pair; int counter = 0; foreach (var sortedSimilarMovie in sortedSimilarMovies) { if (user.MovieLikes.Exists(x => x.Id == sortedSimilarMovie.Key)) { continue; } counter++; movies.Add(await mm.GetMovie(sortedSimilarMovie.Key)); } return(movies); }