我有从日期01/02/2011
开始的数据,每天都会更新。
我想使用从日期01/02/2011
开始的周格式化数据。
我有实体
public DateTime? MeasurementDate { get; set; }
日期格式:
2011-02-01 00:00:00.0000000
这给了我来自数据库的日期..
我想在 linq BY 周中对数据进行分组?
你可以帮我吗?
如果使用 Linq-To-Entities,则可以执行以下操作:
source.GroupBy(x => SqlFunctions.DatePart("ww", x.MeasurementDate));
使用 Calendar
类的 GetWeekOfYear
方法
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));
或者
,您可以获取一周中第一天的日期,然后按该日期分组。
获取一周中第一天的日期。您可以使用以下代码:
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));
参考