我有一张"案例"以下数据:
ID | OpenDate | CloseDate
-----------------------------
1 | 2015-01-01 | 2015-01-02
2 | 2015-01-02 | 2015-01-03
3 | 2015-01-03 | 2015-01-03
我想为指定的日期范围创建一个linq查询,以查看为指定范围内的每个日期打开的案例数,以便我可以创建打开案例的时间轴图。一个案例在其OpenDate,CloseDate和其间的所有日期被视为开放。例如,如果一个案例在1月1日开放并在1月3日关闭,则将在1月1日,2日和3日计算。
如果我查询的日期范围是2015-01-01到2015-01-04,我希望退出查询的结果示例。
Date | Count
--------------------
2015-01-01 | 1
2015-01-02 | 2
2015-01-03 | 2
2015-01-04 | 0
我似乎无法在报告的日期范围内对每个日期执行linq查询,从而找到一种简单的方法(例如,60天的范围将需要对数据库进行60次查询)。是否有一个使用EF从一个查询中获取这些结果的简单解决方案?
修改 修正了一个计数拼写错误。此外,作为澄清,案件被认为是在截止日期结束前开放的。例如,ID 2应该计入1月2日和3日。
答案 0 :(得分:1)
也许试试这个。首先生成您感兴趣的本地日期序列:
var startDate = new DateTime(2015,1,1);
var dates = Enumerable.Range(0,300).Select(offset => startDate.AddDays(offset));
然后,试试这个(dcx
是您的数据上下文,CaseRanges
对应您的第一个表格):
var query = from dte in dates
from row in dcx.CaseRanges
where dte >= row.OpenDate && dte <= row.CloseDate
group dte by dte into grp
select new {Date=grp.Key, Count=grp.Count()};
答案 1 :(得分:-1)
使用foreach循环并将开始日期和结束日期添加到新列表中,以便新列表中包含6个项目,然后在该新列表上执行GroupBy。