Exemple #1
0
        public static IAlbumTimeStatistic GetAlbumTimeStatistics()
        {
            var albums = Logic.Factory.GetAllAlbums();
            var tracks = Logic.Factory.GetALlTracks();

            var lengthList = albums.Join(tracks,
                                         album => album.Id,
                                         tracks => tracks.AlbumId,
                                         (albums, tracks) => new { Albums = albums, Tracks = tracks }
                                         )
                             .GroupBy(elm => elm.Albums)
                             .Select(group => new { Album = group.Key, TotalTime = group.Sum(elm => elm.Tracks.Milliseconds) })
                             .OrderBy(elm => elm.TotalTime);

            var result = new Marketing.Models.AlbumTimeStatistic
            {
                Longest      = lengthList.Last().Album,
                LongestTime  = lengthList.Last().TotalTime,
                Shortest     = lengthList.First().Album,
                ShortestTime = lengthList.First().TotalTime,
                Avg          = (float)lengthList.Average(elm => elm.TotalTime)
            };

            return(result);
        }
Exemple #2
0
        public static Contracts.Report.Marketing.IAlbumTimeStatistic GetAlbumTimeStatistic()
        {
            var tracks = Logic.Factory.GetAllTracks();
            var albums = Logic.Factory.GetAllAlbums();
            var result = new Marketing.Models.AlbumTimeStatistic();

            var query = (from t in tracks
                         join a in albums on t.AlbumId equals a.Id
                         group t.Milliseconds by a.Title)
                        .Select(i => (i.Key, i.Sum()));

            result.maxName   = query.OrderBy(a => a.Item2).Last().Key;
            result.maxNumber = query.OrderBy(a => a.Item2).Last().Item2.ToString();

            result.minName   = query.OrderBy(a => a.Item2).First().Key;
            result.minNumber = query.OrderBy(a => a.Item2).First().Item2.ToString();

            result.avgNumber = Math.Round(query.Average(a => a.Item2) / 1000).ToString();

            return(result);
        }