我正在尝试使用给定的日期范围(fromDate
,toDate
)并按7天的时间段对结果进行绘制。
我的问题是,如果在给定时间段内没有结果,我仍然需要为其绘制结果对象,以便我有一个完整的时间轴。
我的Entity
有一个名为DateCreated
的DateTime字段,这就是我需要分组的内容。
我已经在这里看了很多关于按周分组的例子,但是它有一个给定的日期范围,这使得它更难完成。
答案 0 :(得分:0)
我用以下方法解决了这个问题: -
public Dictionary<DateTime, int> GetDataWeekly(IQueryable<Entity> entities, DateTime from, DateTime to)
{
var graphData = new Dictionary<DateTime, int>();
var weekValues = entities.GroupBy(o => new
{
Year = SqlFunctions.DatePart("yyyy", o.DateCreated),
Week = SqlFunctions.DatePart("ww", o.DateCreated)
}).ToDictionary(o=> o.Key, o=>o.Count());
var currentWeekDateTime = from;
while (currentWeekDateTime < to)
{
var total = 0;
var currentWeekNumber = GetWeekOfYear(currentWeekDateTime);
var generatedKey = new
{
Year = (int?)currentWeekDateTime.Year,
Week = (int?)currentWeekNumber
};
if (weekValues.ContainsKey(generatedKey))
{
total = weekValues[generatedKey];
}
graphData.Add(currentWeekDateTime, total);
currentWeekDateTime = currentWeekDateTime.AddDays(7);
}
return graphData;
}