为了账号安全,请及时绑定邮箱和手机立即绑定

计算年龄范围内的人群

计算年龄范围内的人群

C#
森栏 2022-12-04 13:19:56
我有一个小方法来获取特定年龄范围内的成员数量。该范围应该包括两端,即如果我调用CountSelection(memberList, 16, 19)(memberLista在哪里List<Member>),我希望将 16、17、18 和 19 岁的成员人数加在一起:private int CountSelection(List<Member> members, int minAge, int maxAge){    DateTime from = DateTime.Now.AddYears(minAge * -1);    DateTime to = DateTime.Now.AddYears(maxAge * -1);    return members.Count(m =>        m.DateBorn.Date <= from.Date &&         m.DateBorn.Date >= to.Date);}但是,我的方法不可靠 - 有时它会省略成员,我猜测出生日期何时落在范围之间。在main方法中,我调用CountSelection()了几次,每次调用的范围都不一样,理论上覆盖所有年龄层。查询应该是什么样子才能保证所有成员都被计算在内?
查看完整描述

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);

}


查看完整回答
反对 回复 2022-12-04
?
慕容3067478

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

然后可以在表示层的上限减一。


查看完整回答
反对 回复 2022-12-04
  • 2 回答
  • 0 关注
  • 115 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信