【发布时间】:2015-08-18 15:47:41
【问题描述】:
我有一个包含许多表的数据库。其中一个表 VersionBuild 包含一个日期列。我使用以下查询获得结果,并且只选择在特定时间范围内出现的记录(例如过去 6 个月)
我使用的代码如下
DateTime startDate = DateTime.Now.AddMonths(-(timeFrame));
var grouped = db.VersionBuilds
.Where(r => r.product_id == id && r.date > startDate)
.GroupBy(r => new { r.date.Year, r.date.Month })
.Select(r => new {
month = getMonthName(r.Key.Month),
totalIssues = r.Sum(zz => zz.AcrolinxReport.total_issues)
});
return grouped;
代码的一个问题是,如果没有特定月份的记录,它会忽略它。我在图表中显示返回的信息,因此这会在数据中留下空白。例如,如果我在 5 月和 6 月有记录,它将返回 5 月和 6 月的数据,但我想要的是返回指定时间范围内所有月份的数据,无论是否有任何数据。
【问题讨论】:
-
检查出数据库的日期。我认为这是 mysql 中的 Unix 时间
-
对不起,我的错误是这个数据库使用的是 SQL Server 2008 R2,而不是 MySql
-
在我看来,您要么需要提前几个月通过并执行一些等效的联接(可能不是实际联接),要么在查询后处理结果。我会做后者。
-
检索数据后,您可以使用 for 循环或其他方式遍历并插入缺失的月份
标签: c# linq sql-server-2008