我是在LINQ-to-SQL中编写查询,在此查询中是Date列。我想按“周”分组结果。我将如何在LINQ-to-SQL中执行此操作?
由于
答案 0 :(得分:3)
假设格里高利历,“第一天”周规则,并且一周的第一天是星期一。
第一天的一周规则:
表示一年的第一周从第一天开始 在下一个指定的第一天之前的年份和结束 周
int firstDayOfWeek = (int)DayOfWeek.Monday;
var q =
from u in TblUsers
let date = u.CreateDate.Value
let num = date.DayOfYear - 1
let num2 = ((int)date.DayOfWeek) - (num % 7)
let num3 = ((num2 - firstDayOfWeek) + 14) % 7
let week = (((num + num3) / 7) + 1)
group u by week into g
select new
{
Week = g.Key,
Count = g.Count ()
};
答案 1 :(得分:0)
希望这会有所帮助:
var d1 = new DateTime(1990, 1, 1);
var d2 = new DateTime(1990, 1, 2);
var d3 = new DateTime(1990, 1, 11);
var d4 = new DateTime(1990, 1, 12);
var records = new[] {
new { date = d1, freq = 1 },
new { date = d2, freq = 2 },
new { date = d3, freq = 3 },
new { date = d4, freq = 4 }
};
//ticks * WeekDays * DayHours * HourMins * MinSecs
var weekTicks = (Int64)10000000 * 7 * 24 * 60 * 60;
var res = records.GroupBy(x => x.date.Ticks / weekTicks)
.Select(x => new { week=x.Key ,sum=x.Sum(y=>y.freq)});
这就是结果:
[0] = {week = 99085,sum = 3}
[1] = {week = 99086,sum = 7}