计算年龄范围内的人群

我有一个小方法来获取特定年龄范围内的成员数量。该范围应该包括两端,即如果我调用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()了几次,每次调用的范围都不一样,理论上覆盖所有年龄层。


查询应该是什么样子才能保证所有成员都被计算在内?


森栏
浏览 116回答 2
2回答

万千封印

我发现了为什么我的方法失败了。我只是从开始日期和结束日期中减去整年,得到的范围看起来像这样(日期格式 dd.mm.yyyy):0-5 years - 11.04.2014-11.04.20196-12 years - 11.04.2007-11.04.201313-19 years - 11.04.2000-11.04.200620-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.20196-12 years - 12.04.2006-11.04.201313-19 years - 12.04.1999-11.04.200620-26 years - 12.04.1992-11.04.1999... and so on.最终的工作方法如下所示:private int CountSelection(List<Member> members, int minAge, int maxAge){&nbsp; &nbsp; DateTime from = compareDate.AddYears(-maxAge+1).AddDays(1);&nbsp; &nbsp; DateTime to = compareDate.AddYears(-minAge);&nbsp; &nbsp; return members.Count(m =>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; m.DateBorn >= from &&&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; m.DateBorn <= to);}

慕容3067478

使用具有唯一上限的范围更容易:private int CountSelection(List<Member> members, int minAge, int maxAgeExclusive){&nbsp; &nbsp; DateTime from = compareDate.AddYears(-maxAgeExclusive);&nbsp; &nbsp; DateTime to = compareDate.AddYears(-minAge);&nbsp; &nbsp; return members.Count(m => m.DateBorn > from && m.DateBorn <= to);}现在您的范围在数学上将更加一致。0-6 years6-13 years13-20 years20-27 yearsetc然后可以在表示层的上限减一。
打开App,查看更多内容
随时随地看视频慕课网APP