一部の月にデータが含まれていない場合でも、すべてのデータを月ごとにグループ化できるようにしたいと思います。現時点ではグループ化できますが、返されるデータには数か月分のデータしか含まれていません。
これが私のコードがどのように見えるかです:
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を入力します。
コメントの下のコードを実行せずに、どうすればそれをすべて実行できますか?