[英]LINQ to EF4 datetime comparison problems
将DB(SQL Server 2008)中的smalldatetime / datetime列值与C#中的DateTime.Now进行比较时遇到问题。 我知道数据库和运行应用程序的服务器上的日期时间格式是不同的,因此我已经做了类似的事情来“缓存”结果,因此日期时间比较将是本地的,而不是在服务器上:
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();
有时候,我没有得到正确的记录。
我怀疑这是由于entry.DeactivationDate <DateTime.Now日期比较。 在EF中使用日期时间似乎很棘手,请帮助我确定问题所在。
不知道它是否可以解决您的问题,但我会创建一个局部变量并在其上设置DateTime.Now 。 然后在linq查询中使用局部变量。
这样做是因为每次调用where子句时都会在查询中对DateTime.Now进行求值。 因此,对于inactiveAccounts中的每个条目,您正在使用另一个DateTime。
另外,如果要比较没有时间值的日期,则应使用DateTime.Today
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.Now
和DateTime.UtcNow
被转换为规范函数 =不应在.NET端对其进行求值,而应分别转换为GETDATE()
或GETUTCDATE()
SQL函数调用。
您的其余问题无法回答,因为提供了以下信息
在某些时候,我没有得到正确的记录。
如果要获得答案,包括哪个时期导致问题,使用了哪个时区等,您必须付出更大的努力来分析问题。通常,我们不会帮助您,因为我们看不到您的数据。 这也不是EF的问题,因为在您的情况下,它完全发生在linq-to-object =普通的.NET代码中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.