我使用EF按月、按日或按小时计算帖子数。
我最终得到了一个DateTime/Int列表,其中有一些DateTime间隙。
差距是以年为单位,以年为单位,以月为单位,以月为单位,...
有没有一种方法可以写一个扩展,按年或月来填补DateTime的空白,...
或者甚至是另一个填补int空白的扩展?
谢谢你,米格尔
发布于 2012-03-30 18:29:17
在不查看代码的情况下,为什么不在表中预填入所需的所有日期(即没有空格),计数为0。
Date Count
Jan2012 0
Feb2012 0
Mar2012 0
...
Dec2049 0这将保证你的列表永远不会有空白。您可以使用sql日期函数编写此生成的脚本,也可以使用Excel并导入数据库。
发布于 2012-03-31 07:02:37
基本上,我正在做的事情如下:
// 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 ...
我只是填满了我所习惯的许多步骤…
谢谢你,米格尔
https://stackoverflow.com/questions/9930662
复制相似问题