C# Linq 或 Lambda 表达式 Group by Week IEnumerable list with date field

标签 c# linq lambda

我正在尝试查询 IEnumerable<Object>按周分组,例如:

Project(Name, DateStart,ID)

我有 IEnumerable<Project>我想做一份报告,按周分组。

例如:

Week 1
 Project1  8/4/2013 ID1
 Project2  9/4/2013 ID2
Week 2
 Project1  16/4/2013 ID3
 Project2  18/4/2013 ID5
Week 3
 Project1  24/4/2013 ID7
 Project2  26/4/2013 ID8

如果有人可以帮助我,我真的很感激!我试图做一个 lambda 表达式,但没有成功。

谢谢!

最佳答案

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

关于C# Linq 或 Lambda 表达式 Group by Week IEnumerable list with date field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15927573/

相关文章:

c# - vb.NET 到 C# 的转换错误 : Cannot implicitly convert type 'object' to 'MyCustomObject' An explicit conversion exists

c# - 如何使用 Roslyn 格式化代码选择并维护领先的琐事?

c# - 我怎样才能在linq to sql中全选

node.js - Netlify NodeJS 函数始终返回 'Response to preflight request doesn' t pass'

lambda - 使用 lambda Racket

c# - 您可以将 Microsoft.AspNet.SignalR.Client 与 .NET Core (dnxcore) 一起使用吗

c# - HttpClient getAsync 卡在较大的文件上

c# - 为什么在 linq 中应用 != 时不返回空值

c# - Linq to Entities 是否缓存查询?

c# - 在表达式中引用通用属性