繁体   English   中英

实体框架和时间跨度计算

[英]Entity Framework and timespan computation

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

您可以在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM