将DateTime字段与不同的“时间”进行比较

时间:2013-06-25 16:45:53

标签: c# linq linq-to-sql

我的程序要求用户输入一个日期,然后将其转换为日期时间:

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字段的时间是什么。

3 个答案:

答案 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

之类的事情