填充DateTime和Int间隙

时间:2012-03-29 17:48:12

标签: entity-framework list datetime

我按月,按日或按小时计算帖子,使用EF。

我最终得到一个DateTime / Int列表,其中有一些DateTime间隙。

差距是多年,按年计算,按月计算,按月计算,......

有没有办法编写一个按年或月填补DateTime差距的扩展程序,......

甚至是另一个填补空缺的扩展名?

谢谢你, 米格尔

2 个答案:

答案 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 ...

我只是填写我正在使用很多步骤......

谢谢你, 米格尔