实体框架和时间跨度计算

时间:2012-08-16 04:55:42

标签: c# linq entity-framework

如何使用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}

1 个答案:

答案 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