查询中的实体框架日期时间比较 - 可能的错误?

时间:2016-12-27 17:48:15

标签: c# entity-framework linq 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);

以上查询将 NOT 工作。原因是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的相对新意是责备,但这似乎非常不直观而且有点痛苦,因为Intellisense不会将其作为除DateTime?以外的任何其他内容并且该属性上的悬停工具提示是还DateTime? myTable.eventTime...因此导致我必须找到我正在比较的每个日期属性,以确保我正确转换。

在构造查询之前,EF不应该使用DateTime对象并将其转换为正确的格式,并在实际执行查询之前抛出异常吗?

有没有人熟悉这类问题,你过去做过什么工作呢?

Similar Answered Question

1 个答案:

答案 0 :(得分:0)

解决方法是对{date}类型实体使用DateTime.Date

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

感谢。