我的程序要求用户输入一个日期,然后将其转换为日期时间:
var fromDate = DateTime.Parse(txtFromDate.Text);
我将它转换为DateTime字段的原因是因为我想将它与表中的DateTime字段进行比较,如下所示:
var q = gc.GraphicRequests.Where(a => a.DateInWork == fromDate);
但是,有一个问题。当用户输入日期(2013年6月17日)并将其转换为DateTime字段时,结果日期如下所示: 6/17/2013 12:00:00 AM 。
问题是,当我试图在表格中找到与该日期相匹配的记录时,我没有得到任何点击,因为表格中的日期如下所示: 6/17/2013 05:上午35点或其他时间。所以,日期是正确的,但时间不匹配。
我的问题是,我怎样才能比较日期并省去时间?我只想要与该日期匹配的每条记录,无论DateTime字段的时间是什么。
答案 0 :(得分:4)
您可以尝试使用Date
属性,该属性代表当前DateTime
,但没有任何Time
部分:
var q = gc.GraphicRequests.Where(a => a.DateInWork.Date == fromDate);
如果DateInWork
可以为空(即DateTime?
),请使用:
var q = gc.GraphicRequests.Where(a =>
a.DateInWork.HasValue && a.DateInWork.Value.Date == fromDate);
但是,如果您使用的是Entity Framework,则可能需要查看TruncateTime
方法:
var q = gc.GraphicRequests.Where(a =>
EntityFunctions.TruncateTime(a.DateInWork).Value == fromDate);
答案 1 :(得分:2)
如果您的查询提供程序能够翻译它,那么这将是语义上代表您要执行的操作的选项:
var q = gc.GraphicRequests.Where(a => a.DateInWork.HasValue
&& a.DateInWork.Value.Date == fromDate);
如果没有,只需查看日期是否在当天的开始和结束之间:
DateTime someDate;
DateTime fromDate = someDate.Date, toDate = someDate.Date.AddDays(1);
var q = gc.GraphicRequests.Where(a => a.DateInWork >= fromDate
&& a.DateInWork < toDate);
答案 2 :(得分:1)
如果您使用的是实体框架,请使用EntityFunctions.TruncateTime方法:
var q = gc.GraphicRequests
.Where(a => EntityFunctions.TruncateTime(a.DateInWork) == fromDate);
如果您使用Linq to SQL,那么您可以简单地评估DateTime.Date
属性。或者甚至做a.DateInWork.Date.Year > 2000
。