我按月,按日或按小时计算帖子,使用EF。
我最终得到一个DateTime / Int列表,其中有一些DateTime间隙。
差距是多年,按年计算,按月计算,按月计算,......
有没有办法编写一个按年或月填补DateTime差距的扩展程序,......
甚至是另一个填补空缺的扩展名?
谢谢你, 米格尔
答案 0 :(得分:1)
在不查看代码的情况下,为什么不用数量为0的所有日期(即无间隙)预填充表格。
Date Count
Jan2012 0
Feb2012 0
Mar2012 0
...
Dec2049 0
这将保证您的列表不会有空白。您可以使用sql date函数编写此代的脚本,或使用Excel并导入数据库。
答案 1 :(得分:0)
基本上我正在做的是以下内容:
// Tupple to hold data
IList<Tuple<DateTime, Int32>> data = new List<Tuple<DateTime, Int32>>();
// Get data from repository (Count by year) and add to Tupple
_repository.Set<Post>()
.Where(x => x.Created >= start && x.Created <= end)
.GroupBy(x => new { Year = x.Created.Year })
.Select(x => new { Year = x.Key.Year, Count = x.Count() })
.ToList().ForEach(x => data.Add(new Tuple<DateTime, Int32>(new DateTime(x.Year, 1, 1), x.Count)));
// Fill empty years with 0 as count
for (Int32 i = 0; i <= (end - start).TotalYears; i++)
if (!data.Any(x => x.Item1 == start.AddYears(i)))
data.Add(new Tuple<DateTime, Int32>(start.AddYears(i), 0));
// Resort data
data = data.OrderBy(x => x.Item1).ToList();
基本上我一直在寻找一种方法来减少步骤...
也许使用表格Union或Join ...
我只是填写我正在使用很多步骤......
谢谢你, 米格尔