2

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}
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は知らないことについて不平を言いAddYearsます。

于 2012-08-16T13:31:36.800 に答える