除了Tim Schmelter's
回答之外,您还可以获取一周中第一天的日期,然后按该日期分组。
获取一周中第一天的日期。您可以使用以下代码:
public static class DateTimeExtensions
{
public static DateTime StartOfWeek(this DateTime dt, DayOfWeek startOfWeek)
{
int diff = dt.DayOfWeek - startOfWeek;
if (diff < 0)
{
diff += 7;
}
return dt.AddDays(-1 * diff).Date;
}
}
然后你可以像这样按一周的第一个日期分组:
var weekGroups = projects
.Select(p => new
{
Project = p
})
.GroupBy(x => x.Project.DateStart.StartOfWeek(DayOfWeek.Monday))
.Select((g, i) => new
{
WeekGroup = g,
WeekNum = i + 1
});
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);
}