如何使用EF获得年龄超过21岁的人?
from person in context.Persons
where DateTime.UtcNow - person.Dob > TimeSpan.FromHours(184086)
select new {person, Age = DateTime.UtcNow - person.Dob}
上述失败。
我该怎么做才能解决这个问题?以上是否支持更新版本的EF,例如。 4.2 +
我可以访问DateTime结构的属性,如下所示吗?
from person in context.Persons
where DateTime.UtcNow.Year - person.Dob.Year > 21
select new {person, Age = DateTime.UtcNow.Year - person.Dob.Year}
答案 0 :(得分:4)
您可以在linq-to-entites查询中使用<
运算符。但是你不能使用加法或减法。幸运的是,SqlFunctions
具有计算日期差异的功能。所以你能做的就是:
var d21 = DateTime.Today.AddYears(-21);
var q = from person in context.Persons
where person.Dob < d21
select new
{
person,
Age = SqlFunctions.DateDiff("year", person.Dob, DateTime.Today)
}
您必须先创建变量d21
,否则EF会抱怨不知道AddYears
。