1

如何在where子句中比较年龄和生日?像这样的代码:

myRepository.Where(x =>
    fromAge <= x.BirthDate.Age && x.BirthDate.Age <= toAge)
    .Select(x).toList();

数据类型:

从年龄,到年龄:int

x.BirthDate:日期时间

4

5 回答 5

1

搜索后,我最终得到了这个解决方案:

toDate = DateTime.Now.AddYears(-fromAge).Date.AddYears(1).AddDays(-1);
fromDate = DateTime.Now.AddYears(-toAge).Date.AddYears(-1).AddDays(+1);

考虑将“fromAge”更改为“toDate”,将“toAge”更改为“fromDate”。所以:

myRepository.Where(x => fromDate <= x.BirthDate && x.BirthDate <= toDate)
    .Select(x).toList();
于 2017-07-10T15:43:45.217 回答
0

我认为x.BirthDate是一个日期时间。

你可以得到一个人的年龄,给定一个代表他们出生日期的日期时间,如下所示:

double age = Math.Floor(DateTime.Now.Subtract(BirthDate).TotalDays / 365.25m);

你可以把它变成一个扩展方法:

public static int Age(this DateTime birthDate)
{
    return (int)Math.Floor(DateTime.Now.Subtract(birthDate).TotalDays / 365.25m);
}

然后你可以这样做:

myRepository.Where(x => fromAge <= x.BirthDate.Age() && x.BirthDate.Age() <= toAge).ToList();

但是请注意,如果myRepository是 EntityFramework DbSet,这将不起作用。你必须这样做myRepository.AsEnumerable().Where(// etc),否则你会得到一个例外。

于 2017-07-10T12:06:31.527 回答
0

按以下方式构造 WHERE 子句

myRepository.Where(x =>
        fromAge <= (Datetime.Now.Year - x.BirthDate.Year) && (Datetime.Now.Year - x.BirthDate.Year) <= toAge)
        .Select(x).toList();
于 2017-07-10T12:07:11.620 回答
0

假设 fromAge 和 toAge 是年份:

myRepository.Where(x => DateTime.Now.AddYears(-fromAge) <= x.BirthDate && x.BirthDate <= DateTime.Now.AddYears(-toAge)).ToList();

于 2017-07-10T12:08:05.940 回答
0

我认为您必须将其添加到您的 BirthDate 类中:

[NotMapped]
public int Age { 
    get {
        DateTime now = DateTime.Now;
        int age = now.Year - BirthDate.Year;
        if(now < BirthDate.AddYears(age)) age--;
        return age;
        }
   }

这是让您的年龄属性从出生日期自动计算

于 2017-07-10T12:10:40.620 回答