private static IEnumerable<Title> DoSearch(NetflixCatalog context, MovieSearchCriteria criteria)
        {
            var movies = new List<Title>();
            if (!string.IsNullOrWhiteSpace(criteria.Title))
            {
                movies = context.Titles.Expand("Cast").Where(t => t.Name.ToLower().Equals(criteria.Title.ToLower())).Select(t => t).ToList();
                if (!movies.Any())
                {
                    movies =context.Titles.Expand("Cast").Where(t => t.Name.ToLower().Contains(criteria.Title.ToLower())).Select(t => t).ToList();
                }
                return movies;
            }

            if (!string.IsNullOrWhiteSpace(criteria.Genre))
            {
                var genreList = GenreMap.GetMap(criteria.Genre);
                var genre = genreList.First();
                var byGenre = context.Genres.Expand("Titles/Cast").Where(g => g.Name.Equals(genre)).ToList();
                var titles = byGenre.SelectMany(g => g.Titles.ToList());
                movies = new List<Title>(titles);
                return movies.ToList();
            }

            if (criteria.Key!=null)
            {
                var id = criteria.Key.NetflixId;
                if (!string.IsNullOrWhiteSpace(id))
                {

                    try
                    {
                        movies = context.Titles.Expand("Cast").Where(t => t.Id.Equals(id)).ToList();
                    }
                    catch (Exception e)
                    {
                        Logger.Error(e);
                    }
                }
            }

            return movies;
        }
        public IEnumerable<Movie> SearchMovies(MovieSearchCriteria criteria)
        {
            var netflixUri = new Uri("http://odata.netflix.com/Catalog/");
            var context = new NetflixCatalog(netflixUri);

            var titlesList = DoSearch(context, criteria);
            var movies = titlesList.Select(m => new Movie
                                                    {
                                                        ProviderMovieId = m.Id,
                                                        Availability = m.GetAvailability(),
                                                        WatchedDate = null,
                                                        Title = m.Name,
                                                        Cast = m.GetCast(),
                                                        Key = new MovieKey{NetflixId = m.Id},
                                                        Summary = m.Synopsis,
                                                        RunTime = m.GetRunTimeInMinutes(),
                                                        RelatedImages = m.GetRelatedImages(),
                                                        Reviews = m.GetReviews(),
                                                        Rating = m.GetRating(),
                                                         MPAARating = m.Rating,
                                                         Source = "Netflix"
                                                     }).ToList();
            return movies;
        }