2016-12-27 9 views
0

はあなたがクエリでのEntity FrameworkのDateTime比較 - 考えられるバグ?

public partial class myTable 
{ 
    [Key] 
    public Guid rowID { get; set; } 

    [Column(TypeName = "datetime2")] 
    public DateTime? eventTime { get; set; } 
} 

は今、あなたは5または少ない日前に起こったそこにデータを探していると仮定するようなデータベーステーブルがあるとしますでしょう

DateTime dTVal = DateTime.Now.AddDays(-5); 
var event = db.myTable.Where(evt => evt.eventTime >= dTVal); 

上記のクエリをしません作品。その理由は、DateTime.Nowは時間、分、秒を提供するからです。ただし、sqlなどからエラーを返す代わりに、結果は0行で返されます。

var dtVal = DateTime.Now.AddDays(-5).Date; // This wouldn't work in the LINQ to Entities query because AddDays() method... 
var events = db.myTable.Where(evt => evt.eventTime >= dtVal); 

おそらくEFと私の相対的な新しさのせいですが、とインテリセンスがそれを拾うていないので、これは、非常に直感的でないようで、多少の痛み:期待されるデータを解決し、取得するために

DateTime?以外のもので、プロパティのホバーのツールチップもDateTime? myTable.eventTime...であるため、私が正しく変換していることを確認するために比較しているすべての日付プロパティを見つける必要があります。

この場合、EFはDateTimeオブジェクトを取得し、正しい形式に変換してから実際にクエリを実行する前に例外をスローするべきではありませんか?

このタイプの問題に精通している人はいますか?また、これまで作業していたことはありますか?

Similar Answered Question

+0

'DateTime.Now.AddDays(-5)'が2016-12-22 17:48:15Zの場合、最初のクエリはこの瞬間以降のすべてのイベントを返します。何も問題ありません。 DateTime値には書式はありません。 –

答えて

0

回避策は、date2のタイプのエンティティのためのDateTime.Dateを使用することです。

var compareDate = DateTime.Now.AddDays(-5).Date; 

ありがとうございます。

関連する問題