2 回答
TA贡献1891条经验 获得超3个赞
我发现了为什么我的方法失败了。我只是从开始日期和结束日期中减去整年,得到的范围看起来像这样(日期格式 dd.mm.yyyy):
0-5 years - 11.04.2014-11.04.2019
6-12 years - 11.04.2007-11.04.2013
13-19 years - 11.04.2000-11.04.2006
20-26 years - 11.04.1993-11.04.1999
... and so on.
注意每个范围之间将近一年的差距。
解决方案:
而不是像这样设置起始日期:
DateTime from = DateTime.Now.Date.AddYears(-maxAge);
我当然必须再减去 1 年并增加 1 天:
DateTime from = DateTime.Now.Date.AddYears(-maxAge + 1).AddDays(1);
现在范围看起来像这样:
0-5 years - 12.04.2013-11.04.2019
6-12 years - 12.04.2006-11.04.2013
13-19 years - 12.04.1999-11.04.2006
20-26 years - 12.04.1992-11.04.1999
... and so on.
最终的工作方法如下所示:
private int CountSelection(List<Member> members, int minAge, int maxAge)
{
DateTime from = compareDate.AddYears(-maxAge+1).AddDays(1);
DateTime to = compareDate.AddYears(-minAge);
return members.Count(m =>
m.DateBorn >= from &&
m.DateBorn <= to);
}
TA贡献1773条经验 获得超3个赞
使用具有唯一上限的范围更容易:
private int CountSelection(List<Member> members, int minAge, int maxAgeExclusive)
{
DateTime from = compareDate.AddYears(-maxAgeExclusive);
DateTime to = compareDate.AddYears(-minAge);
return members.Count(m => m.DateBorn > from && m.DateBorn <= to);
}
现在您的范围在数学上将更加一致。
0-6 years
6-13 years
13-20 years
20-27 years
etc
然后可以在表示层的上限减一。
- 2 回答
- 0 关注
- 115 浏览
添加回答
举报