LINQ到EF4的日期时间比较问题

本文关键字:时间 比较 问题 日期 EF4 LINQ | 更新日期: 2023-09-27 18:08:36

我有一个问题,而比较smalldatetime/datetime列值从DB(SQL Server 2008)与datetime。现在在c#中。我知道数据库中的日期时间格式和应用程序运行的服务器上的日期时间格式是不同的,所以我做了这样的事情来"缓存"结果,这样日期时间比较将是本地的,而不是在服务器上:

var inactiveAccounts = (from entry in ent.Accounts
                           where entry.Status == 0                                           
                           select entry).ToArray();
var accountsFiltered = (from entry in inactiveAccounts
                     where entry.DeactivationDate < DateTime.Now
                     select entry).ToArray(); 

在一天中的某些时候,我没有得到正确的记录。

我怀疑这是由于where entry。DeactivationDate & lt;DateTime。现在日期比较。似乎在EF中使用日期时间是棘手的,请帮助我确定问题。

LINQ到EF4的日期时间比较问题

不知道它是否解决了您的问题,但我会创建一个本地变量并设置DateTime。现在开始吧。然后在linq查询中使用本地变量。

这样做是因为DateTime。现在在每次调用where子句时在查询中求值。因此,对于inactiveAccounts中的每个条目,您都在针对另一个DateTime进行工作。

如果你想比较没有时间值的日期,你应该使用DateTime。今天

var inactiveAccounts = (from entry in ent.Accounts
                       where entry.Status == 0                                           
                       select entry).ToArray();
DateTime currentDateTime = DateTime.Now;
var accountsFiltered = (from entry in inactiveAccounts
                 where entry.DeactivationDate < currentDateTime 
                 select entry).ToArray(); 

你可以直接使用:

var inactiveAccounts = (from entry in ent.Accounts
                        where entry.Status == 0 && entry.DeactivationDate < DateTime.Now                  
                        select entry).ToArray();

因为DataTime.NowDateTime.UtcNow被翻译为规范函数=它们不应该在。net端求值,而应该分别转换为GETDATE()GETUTCDATE() SQL函数调用。

你剩下的问题是无法回答的,因为提供像

这样的信息

在一天中的某些时候,我没有得到正确的记录。

如果你想得到答案,包括哪个时期导致问题,使用什么时区,等等,你必须花更多的精力来分析问题。一般来说,我们不会帮助你,因为我们看不到你的数据。这也不是EF的问题,因为在您的情况下,它完全发生在linq-to-object = plain . net代码中。