1

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

var fromDate = DateTime.Parse(txtFromDate.Text);

我将它转换为 DateTime 字段的原因是因为我想将它与表中的 DateTime 字段进行比较,如下所示:

var q = gc.GraphicRequests.Where(a => a.DateInWork == fromDate);

但是,有一个问题。当用户输入日期 (6/17/2013) 并将其转换为 DateTime 字段时,结果日期如下所示: 6/17/2013 12:00:00 AM

问题是,当我试图在表中查找与该日期匹配的记录时,我没有得到任何点击,因为表中的日期如下所示:6/17/2013 05:35 AM或其他时间. 所以,日期是正确的,但时间不匹配。

我的问题是,我怎样才能比较日期而忽略时间?我只想要与该日期匹配的每条记录,无论 DateTime 字段上的时间是什么。

4

3 回答 3

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);

但是,如果您使用的是实体框架,则可能需要查看该TruncateTime方法:

var q = gc.GraphicRequests.Where(a =>
    EntityFunctions.TruncateTime(a.DateInWork).Value == fromDate);
于 2013-06-25T16:47:21.830 回答
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);
于 2013-06-25T16:53:27.920 回答
1

如果您使用的是实体框架,请使用EntityFunctions.TruncateTime方法:

var q = gc.GraphicRequests
          .Where(a => EntityFunctions.TruncateTime(a.DateInWork) == fromDate);

如果您使用的是 Linq to SQL,那么您可以简单地评估DateTime.Date属性。甚至做类似的事情a.DateInWork.Date.Year > 2000

于 2013-06-25T16:50:36.403 回答