首先,您必须考虑一个查询来计算每个日期的激活增量(= 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 –