Complicated group by

.net, c#, group-by, linq

Solution

It sounds like you want to flatten out the movies into move/genre pairs first, then group:

var grouped = from movie in movies
              from genre in movie.Genres
              group movie by genre;

Or avoiding query expressions:

var grouped = movies.SelectMany(movie => move.Genres,
                                (movie, genre) => new { movie, genre })
                    .GroupBy(pair => pair.genre, pair => pair.movie);

Problem

I have a homework, where we are given `IEnumerable<Movie>` where Movie contains `HashSet<string> genres` (list of genres represented by string like "Comedy", "Drama" etc.). How to use LINQ and group by to sort movies by genre? (create `IGrouping<string, IEnumerable<Movie>>`)

Original source