static void Main(string[] args) { var context = new VidzyContext(); var videos = context.Videos.ToList(); //Console.WriteLine("LAZY LOADING"); //foreach (var video in videos) //{ // Console.WriteLine($"VideoName: {video.Name}, Genre is: {video.Genre.Name}"); //} //var videosWithGenres = context.Videos.Include(v => v.Genre).ToList(); //Console.WriteLine(); //Console.WriteLine("Eager loading"); //foreach (var videosWithGenre in videosWithGenres) //{ // Console.WriteLine($"VideoName: {videosWithGenre.Name}, Genre is: {videosWithGenre.Genre.Name}"); //} context.Genres.Load(); Console.WriteLine(); Console.WriteLine("Explicit loading"); foreach (var video in videos) { Console.WriteLine($"VideoName: {video.Name}, Genre is: {video.Genre.Name}"); } }
public static void AddVideo(Video video ) { using (var context = new VidzyContext()) { context.Videos.Add(video); context.SaveChanges(); } }
public static void RemoveVideo(int videoId) { using (var context = new VidzyContext()) { var video = context.Videos.SingleOrDefault(v => v.Id == videoId); if (video == null) return; context.Videos.Remove(video); context.SaveChanges(); } }
public static void AddTag(params string [] tagNames) { using (var context = new VidzyContext()) { var tags = context.Tags.Where(t => tagNames.Contains(t.Name)).ToList(); foreach (var tagName in tagNames) { if (!tags.Any(t => t.Name.Equals(tagName, StringComparison.CurrentCultureIgnoreCase))) context.Tags.Add(new Tag {Name = tagName }); } context.SaveChanges(); } }
public static void RemoveTagFromVideo(int videoId, params string [] tagNames) { using (var context = new VidzyContext()) { context.Tags.Where(t => tagNames.Contains(t.Name)).Load(); var video = context.Videos.Single(v => v.Id == videoId); foreach (var tagName in tagNames) { video.RemoveTag(tagName); } context.SaveChanges(); } }
public static void RemoveGenre(int genreId, bool enforceDeletingVideos ) { using (var context = new VidzyContext()) { var genre = context.Genres.Include(g => g.Videos).SingleOrDefault(g => g.Id == genreId); if (genre == null) return; if (enforceDeletingVideos) context.Videos.RemoveRange(genre.Videos); context.Genres.Remove(genre); context.SaveChanges(); } }
public static void AddTagToVideo(int videoId, params string[] tagNames) { using (var context = new VidzyContext()) { var tags = context.Tags.Where(t => tagNames.Contains(t.Name)).ToList(); foreach (var tagName in tagNames) { if (!tags.Any(t => t.Name.Equals(tagName, StringComparison.CurrentCultureIgnoreCase))) { tags.Add(new Tag {Name = tagName}); } var video = context.Videos.Single(v => v.Id == videoId); tags.ForEach(t => video.AddTag(t)); context.SaveChanges(); } } }
static void Main(string[] args) { var context = new VidzyContext(); var actionMoviesSortedByNameQuerySyntax = from m in context.Videos where m.GenreId == 2 orderby m.Name select m; var actionMoviesSortedByNameExtensionMethod = context.Videos .Where(m => m.GenreId == 2) .OrderBy(m => m.Name); //foreach (var a in actionMoviesSortedByNameExtensionMethod) // Console.WriteLine(a.Name); var goldMoviesSortedByReleaseDateExtensionMethod = context.Videos .Where(m => m.Classification == ExerciseData.Models.Classification.Gold) .OrderByDescending(m => m.ReleaseDate); //foreach (var a in goldMoviesSortedByReleaseDateExtensionMethod) // Console.WriteLine(a.Name); var projectedMovieWithGenre = context.Videos .OrderBy(v => v.Name) .Select(m => new { MovieName = m.Name, GenreName = m.Genre.Name }); //foreach (var a in projectedMovieWithGenre) // Console.WriteLine("{0} - {1}", a.MovieName, a.GenreName); var moviesGroupedClassification = from m in context.Videos group m by m.Classification into g select g; //foreach (var a in moviesGroupedClassification){ // Console.WriteLine(a.Key); // foreach (var m in a) // Console.WriteLine("\t" + m.Name); //} var movieByClass = context.Videos .Select(c => new { Section = c.Classification, VideoName = c.Name }).GroupBy(c => c.Section); //foreach (var item in movieByClass) //{ // Console.WriteLine("{0}-{1}", item.Key, item.Count()); //} var genreWithVideo = context.Videos.Join(context.Genres, v => v.GenreId, g => g.Id, (videos, genres) => new { GenreName = genres.Name, VideoName = videos.Name }).GroupBy(m => m.GenreName); foreach (var item in genreWithVideo) { Console.WriteLine("{0} - {1}", item.Key, item.Count()); } Console.ReadLine(); }
static void Main(string[] args) { var context = new VidzyContext(); //var list1 = context.Videos.Where(v => v.Genre.Name.Equals("Action")).OrderBy(v => v.Name); //foreach (var video in list1) // Console.WriteLine(video.Name); //Console.WriteLine("-----------------------------------------------"); //var list2 = context.Videos // .Where(v => v.Classification == Classification.Gold && v.Genre.Name.Equals("Drama")) // .OrderByDescending(v => v.ReleaseDate); //foreach (var video in list2) // Console.WriteLine(video.Name); //Console.WriteLine("-----------------------------------------------"); //var list3 = context.Videos.Select(v => new //{ // MovieName = v.Name, // Genre = v.Genre.Name //}); //foreach (var video in list3) // Console.WriteLine(video.MovieName); //Console.WriteLine("-----------------------------------------------"); //var list4 = context.Videos.GroupBy(v => v.Classification).Select(v => new //{ // ClassName = "Classification : " + v.Key, // MovieList = v.OrderBy(a => a.Name).ToList() //}); //foreach (var classfi in list4) //{ // Console.WriteLine($@"{classfi.ClassName}"); // foreach (var video in classfi.MovieList) // { // Console.WriteLine($@"{video.Name}"); // } //} //Console.WriteLine("-----------------------------------------------"); //var list5 = context.Videos.GroupBy(v => v.Classification).Select(v => new //{ // KeyName = v.Key, // Count = v.Count() //}).OrderBy(a => a.KeyName.ToString()); //foreach (var video in list5) // Console.WriteLine($@"{video.KeyName}" + "(" + $@"{video.Count}" + @")"); //Console.WriteLine("-----------------------------------------------"); //var list6 = context.Genres.GroupJoin(context.Videos, g => g.Id, v => v.GenreId, (genre, videos) => new //{ // ClassName = genre.Name, // Count = videos.Count(), //}).OrderByDescending(a => a.Count); //foreach (var video in list6) // Console.WriteLine($@"{video.ClassName}" + "(" + $@"{video.Count}" + @")"); Console.WriteLine("-----------------------------------------------"); var videos = context.Videos.ToList(); Console.WriteLine(); Console.WriteLine("LAZY LOADING"); foreach (var v in videos) { Console.WriteLine("{0} ({1})", v.Name, v.Genre.Name); } // Eager loading var videosWithGenres = context.Videos.Include(v => v.Genre).ToList(); Console.WriteLine(); Console.WriteLine("EAGER LOADING"); foreach (var v in videosWithGenres) { Console.WriteLine("{0} ({1})", v.Name, v.Genre.Name); } // Explicit loading // NOTE: At this point, genres are already loaded into the context, // so the following line is not going to make a difference. If you // want to see expicit loading in action, comment out the eager loading // part as well as the foreach block in the lazy loading. context.Genres.Load(); Console.WriteLine(); Console.WriteLine("EXPLICIT LOADING"); foreach (var v in videos) { Console.WriteLine("{0} ({1})", v.Name, v.Genre.Name); } }
static void Main(string[] args) { var context = new VidzyContext(); //Action movies sorted by name var moviesNameSortedQuery = context.Videos .Where(v => v.Genre.Name == "Action") .OrderBy(v => v.Name) .Select(v => new { MovieName = v.Name }); foreach (var m in moviesNameSortedQuery) { Console.WriteLine(m.MovieName); } Console.WriteLine("=======分割线======="); //Gold drama movies sorted by release date (newest first) var goldDramaQuery = context.Videos .Where(v => v.Classification == Classification.Gold && v.Genre.Name == "Drama") .OrderByDescending(v => v.ReleaseDate) .Select(v => new { MovieName = v.Name }); foreach (var g in goldDramaQuery) { Console.WriteLine(g.MovieName); } Console.WriteLine("=======分割线======="); //All movies projected into an anonymous type with two properties: MovieName and Genre var projectedQuery = context.Videos .Select(v => new { MovieName = v.Name, Genre = v.Genre.Name }); foreach (var p in projectedQuery) { Console.WriteLine(p.MovieName); } Console.WriteLine("=======分割线======="); //All movies grouped by their classification var groupedClassificationQuery = context.Videos .GroupBy(v => v.Classification) .Select(g => new { Classification = g.Key.ToString(), Movies = g.OrderBy(v => v.Name) }); foreach (var g in groupedClassificationQuery) { Console.WriteLine(g.Classification); foreach (var v in g.Movies) { Console.WriteLine("\t" + v.Name); } } Console.WriteLine("=======分割线======="); //List of classifications sorted alphabetically and count of videos in them var classificationsQuery = context.Videos .GroupBy(v => v.Classification) .Select(g => new { Classification = g.Key.ToString(), Count = g.Count() }) .OrderBy(g => g.Classification); foreach (var g in classificationsQuery) { Console.WriteLine(g.Classification + " " + g.Count); } Console.WriteLine("=======分割线======="); //List of genres and number of videos they include, sorted by the numberof videos var genresNumberQuery = context.Genres .GroupJoin(context.Videos, g => g.Id, c => c.GenreId, (Genre, Videos) => new { GenresName = Genre.Name, Count = Videos.Count() }) .OrderByDescending(g => g.Count); foreach (var g in genresNumberQuery) { Console.WriteLine("{0} ({1})", g.GenresName, g.Count); } Console.ReadLine(); }
static void Main(string[] args) { var context = new VidzyContext(); // Action Movies sorted by name var actionVideos = context.Videos .Where(v=> v.Genre.Name == "Action") .OrderBy(v => v.Name) .Select(v => v.Name ); foreach (var video in actionVideos) { Console.WriteLine(video); } Console.WriteLine(); //Gold Drama Movies sorted by Releasedate var goldMovies = context.Videos .Where(v => v.Classification == Classification.Gold) .Where(v => v.Genre.Name == "Drama") .OrderBy(v => v.ReleaseDate) .Select(v => v.Name); foreach (var video in goldMovies) { Console.WriteLine(video); } Console.WriteLine(); //All Movies Genre and Name in anonymous type var allMovies = context.Videos .Select(v => new { NameIs = v.Name, TheGenre = v.Genre.Name }); foreach (var allMovie in allMovies) { Console.WriteLine(allMovie); } Console.WriteLine(); //All movies grouped by classification var groupedMovies = context.Videos .GroupBy(v => v.Classification) .Select(g => new { Classification = g.Key.ToString(), Videos = g.OrderBy(v => v.Classification) }); foreach (var groupedMovie in groupedMovies) { Console.WriteLine("Classification: {0}",groupedMovie.Classification); foreach (var video in groupedMovie.Videos) { Console.WriteLine("\t" + video.Name); } } Console.WriteLine(); // List of classifications sorted alpha and count of videos var classifications = context.Videos .GroupBy(v => v.Classification) .Select(g => new { Name = g.Key.ToString(), Count = g.Count() }) .OrderBy(g => g.Name); foreach (var classification in classifications) { Console.WriteLine("{0} ({1})", classification.Name, classification.Count); } Console.WriteLine(); // List of genres and number of videos they include, sorted by the number of videos var genresAndNumberVideos = context.Genres .GroupJoin(context.Videos, g => g.Id, v => v.GenreId, (genre, videos) => new { Name = genre.Name, Count = videos.Count() }) .OrderByDescending(g => g.Count); foreach (var numberVideo in genresAndNumberVideos) { Console.WriteLine("{0} ({1})", numberVideo.Name, numberVideo.Count); } }
public static void Main(string[] args) { using (var context = new VidzyContext()) { #region Action Videos by Name Console.WriteLine(@"#Action Videos"); var actionVideos = context.Videos .Where(video => video.Genre.Name == "Action") .OrderBy(video => video.Name); foreach (var row in actionVideos) { Console.WriteLine($@" {row.Name}"); } Console.WriteLine(); #endregion #region Gold Drama Videos by Release Date Console.WriteLine(@"#Gold Drama Videos"); var dramaVideos = context.Videos .Where(video => video.Genre.Name == "Drama" && video.Classification == Classification.Gold) .OrderBy(video => video.ReleaseDate); foreach (var row in dramaVideos) { Console.WriteLine($@" {row.Name}"); } Console.WriteLine(); #endregion #region Videos with Genre Console.WriteLine(@"#Videos with Genre"); var videosWithGenre = context.Videos.Join ( context.Genres, video => video.GenreID, genre => genre.ID, (video, genre) => new { VideoName = video.Name, VideoGenre = genre.Name } ); foreach (var row in videosWithGenre) { Console.WriteLine($@" {row.VideoGenre} ({row.VideoGenre})"); } Console.WriteLine(); #endregion #region Videos by Classification Console.WriteLine(@"#Videos with Genre"); var videosByClassification = context.Videos .GroupBy(video => video.Classification) .Select(classificationGroup => new { Classification = classificationGroup.Key, Videos = classificationGroup.OrderBy(video => video.Name) }); foreach (var row in videosByClassification) { Console.WriteLine($@" {row.Classification} ({row.Videos.Count()})"); foreach (var video in row.Videos) { Console.WriteLine($@" {video.ID}: {video.Name} ({video.Genre.Name})"); } Console.WriteLine(); } Console.WriteLine(); #endregion #region Classifications with Video Count Console.WriteLine(@"#Classifications with Video Count"); var classificationsWithVideoCount = context.Videos .GroupBy(video => video.Classification) .Select(classification => new { Classification = classification.Key, Count = classification.Count() }) .OrderByDescending(classification => classification.Count); foreach (var row in classificationsWithVideoCount) { Console.WriteLine($@" {row.Classification} ({row.Count})"); } Console.WriteLine(); #endregion #region Genres with Video Count Console.WriteLine(@"#Genres with Video Count"); var genresWithVideoCount = context.Genres .GroupJoin ( context.Videos, genre => genre.ID, video => video.GenreID, (genre, videos) => new { Genre = genre.Name, Count = videos.Count() } ) .OrderByDescending(genre => genre.Count); foreach (var row in genresWithVideoCount) { Console.WriteLine($@" {row.Genre} ({row.Count})"); } Console.WriteLine(); #endregion } }