如何比较只有date时间DateTimetypesLinq to SQL与entity framework?

有没有办法比较Linq2Sql中的2个DateTimevariables,而忽略时间部分。

应用程序将商品存储在数据库中,并添加发布的date。 我想保持确切的时间,但仍然能够靠date本身。

我想比较12/3/89 12:43:34和12/3/89 11:22:12并且不考虑一天中的实际时间,所以这两者都被认为是相同的。

我想我可以将所有的时间都设置为00:00:00,但是实际上我想知道一天的时间,我也只想按date进行比较。

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

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

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

为了真正的比较,你可以使用:

 dateTime1.Date.CompareTo(dateTime2.Date); 

这是我如何做到这一点,以便与LINQ一起工作。

 DateTime date_time_to_compare = DateTime.Now; //Compare only date parts context.YourObject.FirstOrDefault(r => EntityFunctions.TruncateTime(r.date) == EntityFunctions.TruncateTime(date_to_compare)); 

如果你只使用dtOne.Date == dtTwo.Date它不会使用LINQ(错误:在LINQ to Entities中不支持指定的types成员'Date')

 DateTime dt1 = DateTime.Now.Date; DateTime dt2 = Convert.ToDateTime(TextBox4.Text.Trim()).Date; if (dt1 >= dt2) { MessageBox.Show("Valid Date"); } else { MessageBox.Show("Invalid Date... Please Give Correct Date...."); } 

您应该使用EF <6.0的DbFunctions.TruncateTime和EF> 6.0中的DbFunctions.TruncateTime来围绕要在Linq中使用的任何DateTime属性。

 var list = db.Cars.Where(c=> DbFunctions.TruncateTime(c.CreatedDate) > DbFunctions.TruncateTime(DateTime.UtcNow)); 
 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 } 
 DateTime econvertedDate = Convert.ToDateTime(end_date); DateTime sconvertedDate = Convert.ToDateTime(start_date); TimeSpan age = econvertedDate.Subtract(sconvertedDate); Int32 diff = Convert.ToInt32(age.TotalDays); 

差异值代表年龄的天数。 如果该值为负,则开始date在结束date之后。 这是一个很好的检查。

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

如果您使用可以为空的DateFields,则可以使用它。

在join或where子句中,使用列的Date属性。 在幕后,这将执行CONVERT(DATE, <expression>)操作。 这应该允许你比较date没有时间。

  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)) { }