我希望能够将我的所有数据按月分组,即使有些月份不包含任何数据。此时,我可以分组,但返回的数据只包含数据。Linq to Entity,选择无价值团体
下面是我的代码如下所示:
var twelveMonthAgo = date.AddMonths(-12).Date;
var twelveMonthAgoFirstOfMonth = new DateTime(twelveMonthAgo.Year, twelveMonthAgo.Month, 1, 0, 0, 0, 0);
var data = (from i in Database.Users
where i.RegisterDate >= twelveMonthAgoFirstOfMonth
group i by new {y=i.RegisterDate.Year,m = i.RegisterDate.Month} into g
select new UserStatistic{ Date = EntityFunctions.CreateDateTime(g.Key.y, g.Key.m, 1, 0, 0, 0)
, UserCount = g.Count(o => o.Id)
});
//The code below is what I would like to remove
var toReturn = new List<UserStatistic>();
var allData = data.ToList();
DateTime datei = twelveMonthAgoFirstOfMonth;
while (datei.Year<= date.Year && datei.Month<=date.Month){
var info = allData.SingleOrDefault(x => x.Date.HasValue && x.Date.Value.Year == datei.Year && x.Date.Value.Month == datei.Month);
toReturn.Add(info ?? new UserStatistic { Date = datei, UserCount = 0, PaymentPaid = 0 });
datei = datei.AddMonths(1);
}
return toReturn.AsQueryable();
正如你可以看到,注释下的代码建立过去12个月的收集和检查,如果一些数据已经从数据库中,并填写如果存在的话收集集合,否则将其设为0.
我该怎么做,而不必在评论下面做代码?
是“数据”中的第一个月还是1月('1')还是第一年?同样,上个月应该是去年的12月份('12'),还是上个月的'data'? – Jodrell 2012-07-25 15:55:50
您需要将日期的左外连接执行到聚合值。一个group将总会忽略不分组的值。 – casperOne 2012-07-25 16:00:16
@Jodrell日期范围并不重要,这可能会改变。我想要的是获得最后x个月的数据。 – 2012-07-25 16:04:26