public static ITrackSaleStatistic GetTrackSaleStatistic() { var invoiceLines = Logic.Factory.GetAllInvoiceLines(); var tracks = Logic.Factory.GetALlTracks(); var numberOfSells = invoiceLines.Join(tracks, invoiceLine => invoiceLine.TrackId, tracks => tracks.Id, (invoiceLine, tracks) => new { InvoiceLine = invoiceLines, Track = tracks } ) .GroupBy(elm => elm.Track) .Select(elm => new { Track = elm.Key, NumberSold = elm.Count() }) .OrderBy(elm => elm.NumberSold); var result = new Marketing.Models.TrackSaleStatistic { MostRevenue = numberOfSells.Last().Track, MostNumberSold = numberOfSells.Last().NumberSold, MostSold = numberOfSells.Last().Track, LeastRevenue = numberOfSells.First().Track, LeastNumberSold = numberOfSells.First().NumberSold, LeastSold = numberOfSells.First().Track }; return(result); }
public static Contracts.Report.Marketing.ITrackSaleStatistic GetTrackSaleStatistic() { var invoicesLines = Logic.Factory.GetAllInvoicesLines(); var tracks = Logic.Factory.GetAllTracks(); var result = new Marketing.Models.TrackSaleStatistic(); var item = (from i in invoicesLines group i.Quantity by i.TrackId).Select(i => (i.Key, i.Sum())); var max = tracks.Where(q => q.Id == item.Max().Key).SingleOrDefault(); var min = tracks.Where(q => q.Id == item.Min().Key).SingleOrDefault(); result.maxSaleName = max.Name; result.maxSaleNumber = item.Max().ToString(); result.minSaleName = min.Name; result.minSaleNumber = item.Min().ToString(); var query = (from i in invoicesLines join t in tracks on i.TrackId equals t.Id group i.Quantity by t.Name) .Select(j => (j.Key, j.Sum())) .OrderBy(a => a.Item2); result.minPaidSaleName = query.First().Key; result.minPaidSaleName = query.First().Item2.ToString(); result.minPaidSaleName = query.Last().Key; result.minPaidSaleName = query.Last().Item2.ToString(); return(result); }