简体   繁体   中英

DateTime comparison in LINQ not returning correct results

I have the following LINQ to query the database and retreive deleted products from a particular date.

 return _myDbEntities.Log
            .Where(p => p.Action.Equals("Deleted") &&
            (p.ActionDate > fromDate))
            .Select(p => new DeletedProduct()
            {
                ProductId = p.ProductId,
                ActionDate = p.ActionDate
            }).ToList();

However, the query is retreiving values like product.ActionDate.Value = {12/8/2016 11:41:00 AM} when the fromDate was fromDate = {12/8/2016 11:41:00 AM}

The query clearly says GREATER THAN. What is happening here?

There are fractions of a second to each of your properties. Most likely, your record wasn't created at an exact second, whereas any user-created time would be set as such.

Another possibility is the difference between datetime and datetime2 in SQL Server .

The DateTime type stores time at much higher precision than seconds. They could be differing at millisecond or even tick (100 nanoseconds) level.

If you want to compare on a higher level, try this:

(p.ActionDate.Ticks / 10000000) > (fromDate.Ticks / 10000000)

Where 10000000 is the number of ticks in a second. Since the / is an integer division that does truncate the fraction, you turn ticks into full seconds.

UPDATE:

It seems like you are using entity framework. The comparison above will possibly not work there. The solution is to run your original query against the database, do a ToList and then filter the results again in a LINQ2Objects query using the logic above.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM