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

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

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

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

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


当前回答

在连接或where子句中,使用列的Date属性。在幕后,它执行一个CONVERT(DATE, <expression>)操作。这将允许您比较日期而不考虑时间。

其他回答

DateTime dt1=DateTime.ParseExact(date1,"dd-MM-yyyy",null);
DateTime dt2=DateTime.ParseExact(date2,"dd-MM-yyyy",null);

int cmp=dt1.CompareTo(dt2);

   if(cmp>0) {
       // date1 is greater means date1 is comes after date2
   } else if(cmp<0) {
       // date2 is greater means date1 is comes after date1
   } else {
       // date1 is same as date2
   }

在。net 5中:

要比较没有时间的日期,你必须使用EF.Functions.DateDiffDay(),否则你将在代码中进行比较,这意味着你可能会从DB中提取比你需要的更多的数据。

.Where(x => EF.Functions.DateDiffDay(x.ReceiptDate, value) == 0);

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

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));
        int o1 = date1.IndexOf("-");
        int o2 = date1.IndexOf("-",o1 + 1);
        string str11 = date1.Substring(0,o1);
        string str12 = date1.Substring(o1 + 1, o2 - o1 - 1);
        string str13 = date1.Substring(o2 + 1);

        int o21 = date2.IndexOf("-");
        int o22 = date2.IndexOf("-", o1 + 1);
        string str21 = date2.Substring(0, o1);
        string str22 = date2.Substring(o1 + 1, o2 - o1 - 1);
        string str23 = date2.Substring(o2 + 1);

        if (Convert.ToInt32(str11) > Convert.ToInt32(str21))
        {
        }
        else if (Convert.ToInt32(str12) > Convert.ToInt32(str22))
        {
        }
        else if (Convert.ToInt32(str12) == Convert.ToInt32(str22) && Convert.ToInt32(str13) > Convert.ToInt32(str23))
        {
        }