C# Linq or Lambda expression Group by Week IEnumerable list with date field

后端 未结 6 1420
梦如初夏
梦如初夏 2021-01-01 04:53

I am trying to do a query to an IEnumerable to group by week, for example:

Project(Name, DateStart,ID)

I have

6条回答
  •  再見小時候
    2021-01-01 05:24

    var weekGroups = projects
        .Select(p => new 
        { 
            Project = p, 
            Year = p.DateStart.Year, 
            Week =  CultureInfo.InvariantCulture.Calendar.GetWeekOfYear
                          (p.DateStart, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday)
        })
        .GroupBy(x => new { x.Year, x.Week })
        .Select((g, i) => new 
        { 
            WeekGroup = g, 
            WeekNum = i + 1,
            Year = g.Key.Year,
            CalendarWeek = g.Key.Week
        });
    
    foreach (var projGroup in weekGroups)
    {
        Console.WriteLine("Week " + projGroup.WeekNum);
        foreach(var proj in projGroup.WeekGroup)
            Console.WriteLine("{0} {1} {2}", 
                proj.Project.Name, 
                proj.Project.DateStart.ToString("d"), 
                proj.Project.ID);
    }
    

提交回复
热议问题