我希望能夠將我的所有數據按月分組,即使有些月份不包含任何數據。此時,我可以分組,但返回的數據只包含數據。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