首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >填补DateTime和Int的空白

填补DateTime和Int的空白
EN

Stack Overflow用户
提问于 2012-03-30 01:48:12
回答 2查看 118关注 0票数 0

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

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

差距是以年为单位,以年为单位,以月为单位,以月为单位,...

有没有一种方法可以写一个扩展,按年或月来填补DateTime的空白,...

或者甚至是另一个填补int空白的扩展?

谢谢你,米格尔

EN

回答 2

Stack Overflow用户

发布于 2012-03-30 18:29:17

在不查看代码的情况下,为什么不在表中预填入所需的所有日期(即没有空格),计数为0。

代码语言:javascript
运行
复制
Date     Count
Jan2012  0
Feb2012  0
Mar2012  0
...
Dec2049  0

这将保证你的列表永远不会有空白。您可以使用sql日期函数编写此生成的脚本,也可以使用Excel并导入数据库。

票数 1
EN

Stack Overflow用户

发布于 2012-03-31 07:02:37

基本上,我正在做的事情如下:

代码语言:javascript
运行
复制
// 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 ...

我只是填满了我所习惯的许多步骤…

谢谢你,米格尔

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9930662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档