Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 填充DateTime和Int间隙_Entity Framework_List_Datetime - Fatal编程技术网

Entity framework 填充DateTime和Int间隙

Entity framework 填充DateTime和Int间隙,entity-framework,list,datetime,Entity Framework,List,Datetime,我使用EF按月、按日或按小时统计帖子 最后我得到了一个列表DateTime/Int,其中有一些DateTime间隔 差距以年为单位,以年为单位,以月为单位,以月为单位 有没有一种方法可以写一个扩展名,它可以按年份或月份填充日期时间间隔 或者甚至是另一个填补int空白的扩展 谢谢,, Miguel如果不查看代码,为什么不将所有需要的日期(即无间隔)预先填充到表中,计数为0 Date Count Jan2012 0 Feb2012 0 Mar2012 0 ... Dec2049 0

我使用EF按月、按日或按小时统计帖子

最后我得到了一个列表DateTime/Int,其中有一些DateTime间隔

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

有没有一种方法可以写一个扩展名,它可以按年份或月份填充日期时间间隔

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

谢谢,,
Miguel

如果不查看代码,为什么不将所有需要的日期(即无间隔)预先填充到表中,计数为0

Date     Count
Jan2012  0
Feb2012  0
Mar2012  0
...
Dec2049  0

这将保证您的列表不会出现空白。您可以使用sql日期函数为这一代编写脚本,也可以使用Excel并导入数据库。

基本上,我所做的是:

// 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();
//保存数据的元组
IList数据=新列表();
//从存储库获取数据(按年份计数)并添加到tuple
_repository.Set()
.Where(x=>x.Created>=start&&x.Created new{Year=x.Created.Year})
.Select(x=>new{Year=x.Key.Year,Count=x.Count()})
.ToList().ForEach(x=>data.Add(新元组(新日期时间(x.Year,1,1),x.Count));
//用0作为计数填充空年份
对于(Int32 i=0;i x.Item1==start.AddYears(i)))
data.Add(新元组(start.AddYears(i),0));
//度假酒店数据
data=data.OrderBy(x=>x.Item1.ToList();
基本上,我是在寻找一种方法来做到这一点,在较少的步骤

可能使用表并集或联接

我只是填补我正在使用的许多步骤

谢谢,,
米格尔

这可能看起来有点老套,但我会使用这个解决方案。简单。