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 關注
- 147 瀏覽
添加回答
舉報