【问题标题】:Get click statistics count grouped by month获取按月分组的点击统计计数
【发布时间】:2018-07-04 10:52:26
【问题描述】:

一直在努力寻找合适的解决方案,但至今无法理解或找到合适的解决方案。

拥有以下数据库:

我正在尝试获取每个月的点击次数。 所以我会得到类似的东西:

--------------
January - 10
February - 7
March - 22
etc.

这是我目前的代码:

var MonthlyCount = from c in ClickStatistics
               group c.LogDate by new { date = c.LogDate, Id = c.ID }into grp
                    select new{
                        Month = grp.Key.date.Month,
                        Clicks = grp.Key.Id
                    };

但现在我只是得到这个:

【问题讨论】:

  • @Thomas 似乎与我尝试过的差不多,但并不完全正确
  • 如果您不想为每个 c.ID 单独输入条目,请不要按 c.ID 分组,并将月份分组在一起,它们的值必须匹配,所以 c.LogDate.Month 否则您将分组对于每个单独的时间单位。
  • @STDMP,不知道会是什么样子?当我尝试按照我的想法去做时,它只会显示完全相同的东西

标签: sql-server linq


【解决方案1】:

将具有相同c.LogDate.Month 的项目组合在一起。选择组中的第一项以将月份提取为文本值(我们按月份分组,因此在这方面它们都应该相等)并计算组中的条目数。

var ClickStatistics = new List<Clicks>()
{
    new Clicks() { ID = 1, LogDate = DateTime.Now.AddMonths(-1)},
    new Clicks() { ID = 2, LogDate = DateTime.Now.AddMonths(-1)},
    new Clicks() { ID = 3, LogDate = DateTime.Now.AddMonths(0)},
    new Clicks() { ID = 4, LogDate = DateTime.Now.AddMonths(0)},
    new Clicks() { ID = 5, LogDate = DateTime.Now.AddMonths(1)},
};

var MonthlyCount = from c in ClickStatistics
                   group c by new { date = c.LogDate.Month } into grp
                   select new
                   {
                       Month = grp.First().LogDate.ToString("MMMM"),
                       Clicks = grp.Count(),
                   };

【讨论】:

  • 没有tostring,它似乎工作,几乎按预期。因为当我添加 tostring 时出现以下错误: NotSupportedException: Method 'System.String ToString(System.String)' has no supported translation to SQL.
  • 它可能只是 linqpad 执行此操作。我会尝试将它添加到我的代码中,看看它是否会显示正确的值。如果是这样,将其标记为答案
  • @andrelange91 试试Month = string.Format("{0:MMMM}", grp.First().LogDate)
猜你喜欢
  • 2021-11-08
  • 1970-01-01
  • 2017-07-26
  • 1970-01-01
  • 2015-02-06
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多