实体框架Linq Group by DateRange

时间:2017-05-17 16:42:48

标签: c# sql-server linq

我有一个记录页面访问的应用程序,我需要能够按周和按月查询,表查询的示例输出如下(每行代表一次访问:

访问结果集

DateTimeLanding | PageViews
2016-05-12      | 2
2016-05-16      | 3
2016-05-16      | 8
2016-05-16      | 3
2016-05-17      | 7
2016-05-19      | 4
2016-05-28      | 6
2016-05-28      | 3
2016-05-30      | 1

如果我想查询此结果集以进行每日访问,请执行以下操作:

var visitData = visits.GroupBy(v => v.DateLanding)
                            .OrderBy(g => g.Key)
                            .Select(g => new { From = g.Key, Count = g.Count() });

                    visitNodes.Num = visits.Count().ToString();
                    visitNodes.Nodes = visitData.Select(p => new ReferralTrafficNode()
                    {
                        MetricDateTimeFrom = p.From,
                        MetricDateTimeTo = p.From.AddDays(1),
                        Value = p.Count
                    }).ToList();

这适用于每日访问,因为我可以将日期分组。

如何将结果集分组为7天的小组以获取每周访问数据? 基本上我需要能够按日期范围进行分组

1 个答案:

答案 0 :(得分:0)

如果您将小组更改为:

v => v.DateLanding.AddDays(-(int)v.DateLanding.DayOfWeek)

这应该按所选周的星期日进行分组。