2

如何让 21 岁以上的人使用 EF?

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}
4

1 回答 1

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 会抱怨 not known AddYears

于 2012-08-16T13:31:36.800 回答