gpt4 book ai didi

c# - 在 LINQ 中检查年龄过滤器的最短方法?

转载 作者:太空宇宙 更新时间:2023-11-03 17:28:02 25 4
gpt4 key购买 nike

我正在尝试检查某个范围内的人 - 让 lb-lowerbound 和 ub-upper bound 对应于例如lb=18 和 ub=24 的年龄组意味着我正在尝试过滤掉 18 到 24 岁之间的人。数据库中的出生日期日期时间字段也可以为空。我有这个代码 -

var users=from e in employee
where e.DOB.HasValue && ((DateTime.Now.Year - e.DOB.Value.Year)) >= lb)
&& ((DateTime.Now.Year - e.DOB.Value.Year) <= ub)
select e;

但这只是检查年份我如何使用月份并找出实际年龄并根据年龄筛选用户?感谢大家的帮助。

最佳答案

首先,该查询在一年中的时间方面是不正确的——例如,你可能是 17 岁,但仍然算作 18 岁——很少有 1993 年出生的人在今天(2011 年 1 月 17 日)是 18 岁。此外,它会多次计算 DateTime.Now,这意味着在执行查询时年份可能会有所不同

最后,如果您只有一个 where 子句并且您的 select 子句是空操作,那么使用扩展方法语法通常比使用扩展方法语法更简单查询表达式。

我建议:

DateTime today = DateTime.Today;
DateTime min = today.AddYears(-ub);
DateTime max = today.AddYears(-lb);

var years = employee.Where(e => e.DOB != null && e.DOB >= min && e.DOB <= max);

编辑:为了更清楚,对于(比如)10 岁的最大年龄,这意味着您要排除出生日期在 11 年前或更早的任何人,因此您可以这样写:

DateTime today = DateTime.Today;
DateTime min = today.AddYears(-(maxAge + 1));
DateTime max = today.AddYears(-minAge);

var years = employee.Where(e => e.DOB != null && e.DOB > min && e.DOB <= max);

关于c# - 在 LINQ 中检查年龄过滤器的最短方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4715155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com