如何在Linq按周分组数据

时间:2013-01-30 06:53:25

标签: linq c#-4.0

我的数据从日期01/02/2011开始,每天都会更新。

我希望使用从01/02/2011开始的一周来格式化数据。

我有实体

public DateTime? MeasurementDate { get; set; }

日期格式:2011-02-01 00:00:00.0000000

这给了我数据库的日期..

我想在linq BY Week

中对数据进行分组 你能帮助我吗?

3 个答案:

答案 0 :(得分:3)

如果你正在使用Linq-To-Entities,你可以这样做:

source.GroupBy(x => SqlFunctions.DatePart("ww", x.MeasurementDate));

答案 1 :(得分:1)

使用GetWeekOfYear

Calendar方法
var dt = new List<DateTime?> { /*...*/ };
var dfi = DateTimeFormatInfo.CurrentInfo;
var ordered = dt
    .Where(x => x.HasValue)
    .OrderBy(x => dfi.Calendar.GetWeekOfYear(x.Value, CalendarWeekRule.FirstDay, DayOfWeek.Monday));

答案 2 :(得分:0)

或者您可以获得该周第一天的日期,然后按该日期分组。

获取一周中第一天的日期。 你可以使用这段代码:

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

然后你可以按照这样的第一个星期分组:

source.GroupBy(i => i.MeasurementDate.StartOfWeek(DayOfWeek.Monday));

reference