首先,您必須考慮一個查詢來計算每個日期的激活增量(= numberOfActivation - numberOfUnactivation
)。
var activityDeltaPerDate = table
.GroupBy(x => x.duedate.Date) // group by date ignoring time
.Select(group => new { // for each group, sum activation and unactivation
Date = group.Key,
Delta = group.Sum(x => x.IsActive ? 1 : -1)
});
特定日期的激活用戶數量是直到此日期的增量的總和。 所以,你必須要考慮的一個枚舉給所有日期有意思嗎:
var firstDate = new DateTime(2015, 1, 1);
var dates = Enumerable.Range(0, 100)
.Select(x => firstDate.AddDays(x));
現在,你可以在每個日期計算激活用戶的數量:
var activitedUsersPerDate = dates
.Select(x => new {
Date = x.Date,
ActivatedUsers = activitedUsersAtDate.Where(y => y.Date <= x.Date).Sum(y => y.Delta)
};
如果你想激活用戶數每月,只需更改GroupBy
鍵選擇器以選擇月份的第一天:x => new DateTime(x.duedate.Year, x.dueDate.Month, 1)
並更改使用AddMonths
而不是AddDays
更改dates
集合。
你到目前爲止試過的東西? – Arash
我也應該問,你的文字是「月和日」,但你的例子也顯示了年份。 2015年12月2日應與2014年2月12日分組,還是他們是分開的組? – dman2306
arash jan kheili fullenglish gofti :) saadetar bego lotfan –