C# 每周分组?

C# 每周分组?,c#,linq,group-by,C#,Linq,Group By,林克 GetGroupingDateKey() 记录时间:2012年10月10日-09:15至10:15之间 private static DateTime GetGroupingDateKey(MeterReadingsTimeIntervals DateRangeType, DateTime Date) { DateTime date = new DateTime(); switch (DateRangeType) { case MeterReadin

林克

GetGroupingDateKey()

记录时间:2012年10月10日-09:15至10:15之间

private static DateTime GetGroupingDateKey(MeterReadingsTimeIntervals DateRangeType, DateTime Date)
{
    DateTime date = new DateTime();
    switch (DateRangeType)
    {
        case MeterReadingsTimeIntervals.Hourly:
            //For Example data is betweet 10:05 - 11:05
            //DateTime offSet = Date.AddMinutes(-5);
            //date = new DateTime(offSet.Year, offSet.Month, offSet.Day, offSet.Hour, 5, 0);
            date = new DateTime(Date.Year, Date.Month, Date.Day, Date.Hour, 0, 0);
            break;
        case MeterReadingsTimeIntervals.Daily:
            date = new DateTime(Date.Year, Date.Month, Date.Day, 0, 0, 0);
            break;
        case MeterReadingsTimeIntervals.Weekly:
            date = Date.AddDays(-((7 + Date.DayOfWeek - DayOfWeek.Monday) % 7));
            break;
        case MeterReadingsTimeIntervals.Monthly:
            date = new DateTime(Date.Year, Date.Month, 1, 0, 0, 0);
            break;
        case MeterReadingsTimeIntervals.Yearly:
            date = new DateTime(Date.Year, 1, 1, 0, 0, 0);
            break;
    }

    return date;
}
如何按周对记录进行分组。我的每周分组有什么问题


提前谢谢。

我想你的
日期有一个时间段-你需要把它归零,例如

Hourly groupped data count  : 2 (expected)

Daily groupped data count   : 1 (expected)

Weekly groupped data count  : 5 (group count (not expected))

Monthly groupped data count : 1 (expected)

Yearly groupped data count  : 1 (expexted)

我会想象你的
日期有一个时间部分-你需要把它归零,例如

Hourly groupped data count  : 2 (expected)

Daily groupped data count   : 1 (expected)

Weekly groupped data count  : 5 (group count (not expected))

Monthly groupped data count : 1 (expected)

Yearly groupped data count  : 1 (expexted)

正是我所想的。您总是使用空时间部分创建新的
DateTime
值-除了这一种情况。基本上,您的原始代码正在转换,例如“星期二下午5点”、“星期五上午7点”、“星期天晚上9点”到“星期一下午5点”、“星期一上午7点”、“星期一下午9点”,因此它们仍然不同。通过使用
Date.Date
而不是
Date
,此代码将例如“星期二下午5点”转换为“星期二午夜”,然后将其转换为“星期一午夜”。这正是我所想的。您总是使用空时间部分创建新的
DateTime
值-除了这一种情况。基本上,您的原始代码正在转换,例如“星期二下午5点”、“星期五上午7点”、“星期天晚上9点”到“星期一下午5点”、“星期一上午7点”、“星期一下午9点”,因此它们仍然不同。通过使用
Date.Date
而不是
Date
,此代码将例如“星期二下午5点”转换为“星期二午夜”,然后将其转换为“星期一午夜”。
date = Date.Date.AddDays(-((7 + Date.DayOfWeek - DayOfWeek.Monday) % 7));