How to compare only Date without Time in DateTime types in Linq to SQL with Entity Framework?

Viewed 369649

Is there a way to compare two DateTime variables in Linq2Sql but to disregard the Time part.

The app stores items in the DB and adds a published date. I want to keep the exact time but still be able to pull by the date itself.

I want to compare 12/3/89 12:43:34 and 12/3/89 11:22:12 and have it disregard the actual time of day so both of these are considered the same.

I guess I can set all the times of day to 00:00:00 before I compare but I actually do want to know the time of day I just also want to be able to compare by date only.

I found some code that has the same issue and they compare the year, month and day separately. Is there a better way to do this?

13 Answers

try using the Date property on the DateTime Object...

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

For a true comparison, you can use:

dateTime1.Date.CompareTo(dateTime2.Date);

You can try

if(dtOne.Year == dtTwo.Year && dtOne.Month == dtTwo.Month && dtOne.Day == dtTwo.Day)
  ....

In your join or where clause, use the Date property of the column. Behind the scenes, this executes a CONVERT(DATE, <expression>) operation. This should allow you to compare dates without the time.

In .NET 5:

To compare date without time you must use EF.Functions.DateDiffDay() otherwise you will be comparing in code and this means you are probably pulling way more data from the DB than you need to.

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

For those who uses query comprehensive syntax and 2019 approach at EF 6:

                        from obj in _context.Object
                        where DbFunctions.TruncateTime(obj.datetimeField) == DbFunctions.TruncateTime(dateTimeVar)
                        select obj
                    ).ToList();
Related