public async Task Load() { IsLoading = true; try { if (Movies.Any()) { _logManager.LogDebug("Movies already loaded, skipping to reload."); return; } IList <Movie> movies = (await _movieService.GetMovies()).ToList(); foreach (Movie movie in movies.OrderBy(q => q.Name)) { Movies.Add(movie); } ContinueWatchingMovies = new ObservableCollectionEx <Movie>( Movies.Where(q => q.PlaybackPosition.Ticks > 0)); RaisePropertyChanged(nameof(ContinueWatchingMovies)); RecentlyReleasedMovies = new ObservableCollectionEx <Movie>(Movies .Where(q => q.PremiereDate > DateTime.Now.AddMonths(-18)) .OrderByDescending(q => q.PremiereDate) .Take(20).ToList()); RaisePropertyChanged(nameof(RecentlyReleasedMovies)); MovieGenres = _movies.SelectMany(q => q.Genres).GroupBy(q => q).Select(group => group.Key) .OrderBy(x => x).ToList(); FirstFavoriteGenre = MovieGenres[0]; SecondFavoriteGenre = MovieGenres[1]; MoviesFirstFavoriteGenre = new ObservableCollectionEx <Movie>(Movies .Where(q => q.Genres.Any(w => w == FirstFavoriteGenre)) .OrderByDescending(q => q.OfficialRating) .Take(20).ToList()); RaisePropertyChanged(nameof(MoviesFirstFavoriteGenre)); MoviesSecondFavoriteGenre = new ObservableCollectionEx <Movie>(Movies .Where(q => q.Genres.Any(w => w == SecondFavoriteGenre)) .OrderByDescending(q => q.OfficialRating) .Take(20).ToList()); RaisePropertyChanged(nameof(MoviesSecondFavoriteGenre)); OrderByName(); } catch (Exception xc) { _logManager.LogError(xc, "An error occurred while loading movies."); } finally { IsLoading = false; } }