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); }
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); }