假设您有一个数据库表
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
对象并将其转换为正确的格式,并在实际执行查询之前抛出异常吗?
有没有人熟悉这类问题,你过去做过什么工作呢?
答案 0 :(得分:0)
解决方法是对{date}类型实体使用DateTime.Date
。
var compareDate = DateTime.Now.AddDays(-5).Date;
感谢。