MONI.Data.WorkYear.GetProjectHitlistAsync C# (CSharp) Method

GetProjectHitlistAsync() private static method

private static GetProjectHitlistAsync ( IEnumerable months, int lookBackInWeeks, PNSearchViewModel pnSearchViewModel ) : Task>
months IEnumerable
lookBackInWeeks int
pnSearchViewModel MONI.ViewModels.PNSearchViewModel
return Task>
        private static async Task<IEnumerable<HitlistInfo>> GetProjectHitlistAsync(IEnumerable<WorkMonth> months, int lookBackInWeeks, PNSearchViewModel pnSearchViewModel)
        {
            return await Task.Factory.StartNew(() => {
                var allDays = months.SelectMany(m => m.Days);
                var daysFromLookback = lookBackInWeeks > 0 ? allDays.Where(m => m.DateTime > DateTime.Now.AddDays(lookBackInWeeks * -7)) : allDays;
                var hitlistInfos = daysFromLookback
                    .SelectMany(d => d.Items)
                    .GroupBy(p => p.Project)
                    .Select(g =>
                        new HitlistInfo(
                            g.Key,
                            g.Count(),
                            g.Sum(wi => wi.HoursDuration),
                            g.OrderByDescending(p => p.WorkDay.DateTime)
                                .Select(p => pnSearchViewModel.GetDescriptionForProjectNumber(p.Project))
                                .FirstOrDefault())
                    );
                return hitlistInfos.OrderByDescending(g => g.HoursUsed);
            });
        }