如何比较年龄与出生日期where条款?财产以后这样的代码:比较年龄与出生日期在哪里条款
myRepository.Where(x =>
fromAge <= x.BirthDate.Age && x.BirthDate.Age <= toAge)
.Select(x).toList();
数据类型:
清爽,toAge:整数
x.BirthDate:日期时间
如何比较年龄与出生日期where条款?财产以后这样的代码:比较年龄与出生日期在哪里条款
myRepository.Where(x =>
fromAge <= x.BirthDate.Age && x.BirthDate.Age <= toAge)
.Select(x).toList();
数据类型:
清爽,toAge:整数
x.BirthDate:日期时间
搜索后,我结束了此解决方案:
toDate = DateTime.Now.AddYears(-fromAge).Date.AddYears(1).AddDays(-1);
fromDate = DateTime.Now.AddYears(-toAge).Date.AddYears(-1).AddDays(+1);
考虑改变 “清爽” 到 “TODATE” 和 “toAge” 到 “FROM日期”。所以:
myRepository.Where(x => fromDate <= x.BirthDate && x.BirthDate <= toDate)
.Select(x).toList();
我相信x.BirthDate
是一个DateTime。
给定代表他们的D.O.B的DateTime,可以得到一个人的年龄。像这样:
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)
,否则你会得到一个例外。
LINQ to Entities不能识别方法'Int32 Age(System.DateTime)'方法,并且此方法不能转换为存储表达式。 –
@AliDehqan我解释了如何避免在我的答案的最后一行。 – stybl
您使用AsEnumerable()从存储库获取所有数据,然后使用where。这是不正确的方式 –
构造一个WHERE下列方式
myRepository.Where(x =>
fromAge <= (Datetime.Now.Year - x.BirthDate.Year) && (Datetime.Now.Year - x.BirthDate.Year) <= toAge)
.Select(x).toList();
这不是计算时代的正确方法。 –
假设清爽和toAge是多年条款:
myRepository.Where(x => DateTime.Now.AddYears(-fromAge) <= x.BirthDate && x.BirthDate <= DateTime.Now.AddYears(-toAge)).ToList();
这不是计算年龄的正确方法。 –
我认为你必须把它添加到您的生日类:
[NotMapped]
public int Age {
get {
DateTime now = DateTime.Now;
int age = now.Year - BirthDate.Year;
if(now < BirthDate.AddYears(age)) age--;
return age;
}
}
这是让你的年龄属性自动计算TE从生日
你的函数是正确的,但我们不能在查询表达式中使用Age方法。 –
myRepository.Where(x => fromAge <= x.BirthDate.Age).Where(x.BirthDate.Age <= toAge) .Select(x)。toList(); – mpk
LINQ to Entities不识别方法'Int32 Age(System.DateTime)'方法,并且此方法不能转换为存储表达式。 –
你的代码有什么问题? –
x.BirthDate.Age是假的 –