where句でageとbirthdateを比較する方法は?気にいらこのコードのよう:年齢と誕生日を比較してwhere句
myRepository.Where(x =>
fromAge <= x.BirthDate.Age && x.BirthDate.Age <= toAge)
.Select(x).toList();
データ型:
フロマージュ、toAge:日時
where句でageとbirthdateを比較する方法は?気にいらこのコードのよう:年齢と誕生日を比較してwhere句
myRepository.Where(x =>
fromAge <= x.BirthDate.Age && x.BirthDate.Age <= toAge)
.Select(x).toList();
データ型:
フロマージュ、toAge:日時
からTE検索した後、私はこの解決策になってしまった:
toDate = DateTime.Now.AddYears(-fromAge).Date.AddYears(1).AddDays(-1);
fromDate = DateTime.Now.AddYears(-toAge).Date.AddYears(-1).AddDays(+1);
は "フロマージュ" を変更することを検討 "toDateまで" と "toAge" を "fromDateから" へ。 so:
myRepository.Where(x => fromDate <= x.BirthDate && x.BirthDate <= toDate)
.Select(x).toList();
私はx.BirthDate
推測日時です:x.BirthDateは
int型。
人の年齢は、D.O.Bを表すDateTimeで取得できます。そのよう:
public static int Age(this DateTime birthDate)
{
return (int)Math.Floor(DateTime.Now.Subtract(birthDate).TotalDays/365.25m);
}
をそしてあなたが行うことができます:
double age = Math.Floor(DateTime.Now.Subtract(BirthDate).TotalDays/365.25m);
あなたが拡張メソッドにこれを行うことができますmyRepository
がEntityFramework DbSet
がある場合
myRepository.Where(x => fromAge <= x.BirthDate.Age() && x.BirthDate.Age() <= toAge).ToList();
が、しかし助言され、これは動作しません。あなたはmyRepository.AsEnumerable().Where(// etc)
をしなければならないでしょう、さもなければ例外を得るでしょう。
LINQ to Entitiesは、 'Int32 Age(System.DateTime)'メソッドを認識せず、このメソッドをストア式に変換することはできません。 –
@AliDehqan私は私の答えの最後の行でそれを避ける方法を説明しました。 – stybl
AsEnumerable()でリポジトリからすべてのデータを取得してから、whereを使用しています。これは正しい方法ではありません –
年ですフロマージュとtoAgeを想定すると、次のよう
myRepository.Where(x =>
fromAge <= (Datetime.Now.Year - x.BirthDate.Year) && (Datetime.Now.Year - x.BirthDate.Year) <= toAge)
.Select(x).toList();
これは、年齢を計算する正しい方法ではありません。 –
でWHERE句を構築:
myRepository.Where(x => DateTime.Now.AddYears(-fromAge) <= x.BirthDate && x.BirthDate <= DateTime.Now.AddYears(-toAge)).ToList();
これは、年齢を計算する正しい方法ではありません。 –
私はあなたの誕生日のクラスにこれを追加する必要が思う:
[NotMapped]
public int Age {
get {
DateTime now = DateTime.Now;
int age = now.Year - BirthDate.Year;
if(now < BirthDate.AddYears(age)) age--;
return age;
}
}
これは、自動計算の年齢プロパティです誕生日
あなたの関数は正しいですが、クエリ式でAgeメソッドを使用することはできません。 –
myRepository.Where(x => fromAge <= x.BirthDate.Age).Where(x.BirthDate.Age <= toAge) .Select(x)。toList(); – mpk
LINQ to Entitiesは、メソッド 'Int32 Age(System.DateTime)'を認識せず、このメソッドをストア式に変換することはできません。 –
あなたのコードには何が問題なのですか? –
x.BirthDate.Ageが偽です –