Entity framework 填充DateTime和Int间隙
我使用EF按月、按日或按小时统计帖子 最后我得到了一个列表DateTime/Int,其中有一些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
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();
基本上,我是在寻找一种方法来做到这一点,在较少的步骤
可能使用表并集或联接
我只是填补我正在使用的许多步骤
谢谢,,
米格尔这可能看起来有点老套,但我会使用这个解决方案。简单。