【发布时间】:2019-08-29 09:46:47
【问题描述】:
我的数据库中有一组分析事件,我想将这些按日期分组的数据发送到我的客户端应用程序。
数据库中的数据看起来像这样(但有数百条记录):
[
{
"DateAdded": "2006-12-30 00:38:54",
"Event": "click",
"Category": "externalWebsite"
},
{
"DateAdded": "2006-07-20 00:36:44",
"Event": "click",
"Category": "social"
},
{
"DateAdded": "2006-09-20 00:36:44",
"Event": "click",
"Category": "social"
},
{
"DateAdded": "2006-09-22 00:12:34",
"Event": "load",
"Category": "profile"
}
]
我想要做的是返回所有说“社交”“点击”的计数,但按月返回,所以它看起来像这样:
[
{
"name": "socialclicks",
"series": [
{
"count": 259,
"name": "Jan"
},
{
"count": 0,
"name": "Feb"
},
{
"count": 52,
"name": "Mar"
}
... etc, etc up to Dec <====
]
}
]
所以,我一直在尝试使用他们的 id 获取与特定用户关联的所有记录。这很简单。
现在我需要将它们的记录拆分为每月计数,显示从当前月份开始的最近 12 个月(如果该月份不存在,则返回 0) - 这被证明是复杂和困难的。
我的做法是这样的:
var records = context.records.where(r => r.Id = userId).ToList();
var jan
var feb
var mar
var apr
... etc, etc
for (int i = 0; i < records.Count ; i++)
{
if (record.DateAdded > "2005-12-31 00:00.00" && record.DateAdded < "2006-01-31 00:00.00") {
jan++;
}
if (record.DateAdded > "2006-01-31 00:00.00" && record.DateAdded < "2006-02-28 00:00.00") {
feb++;
}
...etc, etc
}
然后我使用这些变量来计算和硬编码返回数据的名称。
正如你所看到的,有很多等等,因为代码变得荒谬!
一定有更简单的方法可以做到这一点,但我似乎找不到!
我们将不胜感激。
谢谢
【问题讨论】:
-
您正在研究的条目是在同一年创建的吗?
-
不幸的是没有,我希望只返回过去 12 个月,但我认为稍后会解决这个问题! IE。如果是 2018 年 8 月,我会从 2017 年 8 月到 2018 年 8 月返回,任何为空的都返回 0。
-
你要么用这些额外的要求更新你的问题,否则我不会将它们视为问题范围的一部分。
-
好的,谢谢,已按照建议更新了我的问题。
标签: c# .net entity-framework linq