是否有一种方法可以比较Linq2Sql中的两个DateTime变量,但忽略时间部分。

应用程序将项目存储在数据库中,并添加发布日期。我想保持准确的时间,但仍然能够拉到日期本身。

我想比较12/3/89 12:43:34和12/3/89 11:22:12,并忽略一天中的实际时间,因此这两者都被认为是相同的。

我想我可以在比较之前将一天中的所有时间设置为00:00:00,但我实际上想知道一天中的时间,我也希望能够仅通过日期进行比较。

我发现一些代码有同样的问题,他们分别比较年,月和日。还有更好的办法吗?


当前回答

要进行真正的比较,你可以使用:

dateTime1.Date.CompareTo(dateTime2.Date);

其他回答

DateTime? NextChoiceDate = new DateTime();
DateTIme? NextSwitchDate = new DateTime();
if(NextChoiceDate.Value.Date == NextSwitchDate.Value.Date)
{
Console.WriteLine("Equal");
}

如果您正在使用可为空的DateFields,则可以使用此选项。

DateTime econvertedDate = Convert.ToDateTime(end_date);
DateTime sconvertedDate = Convert.ToDateTime(start_date);

TimeSpan age = econvertedDate.Subtract(sconvertedDate);
Int32 diff = Convert.ToInt32(age.TotalDays);

diff值表示年龄的天数。如果该值为负,则开始日期在结束日期之后。这是一张很好的支票。

尝试在DateTime对象上使用Date属性…

if(dtOne.Date == dtTwo.Date)
    ....

要进行真正的比较,你可以使用:

dateTime1.Date.CompareTo(dateTime2.Date);

如果使用Entity Framework < v6.0,则使用EntityFunctions。TruncateTime 如果你使用实体框架>= v6.0,那么使用DbFunctions。TruncateTime

使用任何一个(基于你的EF版本)周围的DateTime类属性,你想在你的Linq查询中使用

例子

var list = db.Cars.Where(c=> DbFunctions.TruncateTime(c.CreatedDate) 
                                       >= DbFunctions.TruncateTime(DateTime.UtcNow));