public ActionResult genreReport()
        {
            var query = from g in db.Genres
                        select g;

            List <Genre> allGenres = query.ToList();
            List <GenreReportViewModel> grvmList = new List <GenreReportViewModel>();

            foreach (Genre g in allGenres)
            {
                GenreReportViewModel grvm = new GenreReportViewModel();
                grvm.totalRev   = 0.ToString("c");
                grvm.songRev    = 0.ToString("c");
                grvm.songCount  = 0;
                grvm.albumCount = 0;
                grvm.topArtist  = "N/A";
                grvm.Genre      = g;
                Decimal topRevenue = 0;
                foreach (Artist a in g.GenreArtists)
                {
                    Int32   artistSongPurchaseCount  = 0;
                    Int32   artistAlbumPurchaseCount = 0;
                    Decimal artistSongRev            = 0;
                    Decimal artistAlbumRev           = 0;
                    Decimal totalArtistRev           = 0;
                    var     query2 = from pi in db.PurchaseItems
                                     select pi;
                    List <PurchaseItem> allPurchaseItems = query2.ToList();
                    List <PurchaseItem> songsPurchased   = new List <PurchaseItem>();
                    List <PurchaseItem> albumsPurchased  = new List <PurchaseItem>();
                    foreach (PurchaseItem pi in allPurchaseItems)
                    {
                        if (!pi.isAlbum)
                        {
                            if (pi.PurchaseItemSong.SongArtist.Contains(a))
                            {
                                songsPurchased.Add(pi);
                            }
                        }
                        else
                        {
                            if (pi.PurchaseItemAlbum.AlbumArtist.Contains(a))
                            {
                                albumsPurchased.Add(pi);
                            }
                        }
                    }
                    artistSongPurchaseCount = songsPurchased.Count();
                    foreach (PurchaseItem pi in songsPurchased)
                    {
                        artistSongRev += pi.PurchaseItemPrice;
                    }
                    artistAlbumPurchaseCount = albumsPurchased.Count();
                    foreach (PurchaseItem pi in albumsPurchased)
                    {
                        artistAlbumRev += pi.PurchaseItemPrice;
                    }
                    totalArtistRev = artistAlbumRev + artistSongRev;
                    if (totalArtistRev > topRevenue)
                    {
                        topRevenue      = totalArtistRev;
                        grvm.topArtist  = a.ArtistName;
                        grvm.albumRev   = artistAlbumRev.ToString("c");
                        grvm.albumCount = artistAlbumPurchaseCount;
                        grvm.songRev    = artistSongRev.ToString("c");
                        grvm.songCount  = artistSongPurchaseCount;
                        grvm.totalRev   = totalArtistRev.ToString("c");
                    }
                }
                grvmList.Add(grvm);
            }
            grvmList = grvmList.OrderByDescending(x => x.albumRev).ToList();
            return(View(grvmList));
        }
        public ActionResult GenreReport()
        {
            List <Genre> Genres = db.Genres.ToList();
            List <GenreReportViewModel> TopArtists = new List <GenreReportViewModel>();

            foreach (Genre genre in Genres)
            {
                List <Artist> Artists = db.Artists.ToList();

                GenreReportViewModel TopArtist = new GenreReportViewModel();
                foreach (Artist artist in Artists)
                {
                    if (artist.Genres.Contains(genre))
                    {
                        int     songpurchases  = 0;
                        int     albumpurchases = 0;
                        decimal songrevenue    = 0.00m;
                        decimal albumrevenue   = 0.00m;
                        decimal totalrevenue   = 0.00m;
                        GenreReportViewModel artistinstance = new GenreReportViewModel();
                        List <Song>          SongsByArtist  = db.Songs.Where(x => x.Artists.Contains(artist)).ToList();
                        foreach (Song song in SongsByArtist)
                        {
                            Int32 SaleCount;
                            SaleCount = 0;

                            Decimal TotalSongRevenue;
                            TotalSongRevenue = 0.00m;
                            List <OrderDetail> OrderDetails = db.OrderDetails.Where(x => x.Product.ContentID == song.ContentID).ToList();
                            foreach (OrderDetail orderdetail in OrderDetails)
                            {
                                SaleCount        += 1;
                                TotalSongRevenue += orderdetail.ExtendedPrice;
                            }

                            songpurchases += SaleCount;
                            songrevenue   += TotalSongRevenue;
                        }

                        List <Album> AlbumsByArtist = db.Albums.Where(x => x.Artists.Contains(artist)).ToList();
                        foreach (Album album in AlbumsByArtist)
                        {
                            Int32 SaleCount;
                            SaleCount = 0;

                            Decimal TotalAlbumRevenue;
                            TotalAlbumRevenue = 0.00m;
                            List <OrderDetail> OrderDetails = db.OrderDetails.Where(x => x.Product.ContentID == album.ContentID).ToList();
                            foreach (OrderDetail orderdetail in OrderDetails)
                            {
                                SaleCount         += 1;
                                TotalAlbumRevenue += orderdetail.ExtendedPrice;
                            }

                            albumpurchases += SaleCount;
                            albumrevenue   += TotalAlbumRevenue;
                        }
                        artistinstance.ArtistName = artist.ArtistName;
                        artistinstance.GenreName  = genre.GenreName;
                        totalrevenue = albumrevenue + songrevenue;
                        artistinstance.AlbumPurchases = albumpurchases;
                        artistinstance.AlbumRevenue   = albumrevenue;
                        artistinstance.SongPurchases  = songpurchases;
                        artistinstance.SongRevenue    = songrevenue;
                        artistinstance.TotalRevenue   = totalrevenue;
                        if (totalrevenue >= TopArtist.TotalRevenue)
                        {
                            TopArtist = artistinstance;
                        }
                    }
                }
                //Add top artist of that genre to the list
                TopArtists.Add(TopArtist);
            }
            ViewBag.TopArtists = TopArtists;

            return(View());
        }