Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ到EF4日期时间比较问题_C#_Sql Server 2008_Entity Framework - Fatal编程技术网

C# LINQ到EF4日期时间比较问题

C# LINQ到EF4日期时间比较问题,c#,sql-server-2008,entity-framework,C#,Sql Server 2008,Entity Framework,在比较DBSQLServer2008中的smalldatetime/datetime列值与datetime时出现问题。 我知道数据库中的日期时间格式与运行应用程序的服务器上的日期时间格式不同,所以我做了类似的操作来缓存结果,以便日期时间比较将是本地的,而不是服务器上的: var inactiveAccounts = (from entry in ent.Accounts where entry.Status == 0

在比较DBSQLServer2008中的smalldatetime/datetime列值与datetime时出现问题。 我知道数据库中的日期时间格式与运行应用程序的服务器上的日期时间格式不同,所以我做了类似的操作来缓存结果,以便日期时间比较将是本地的,而不是服务器上的:

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不知道它是否解决了您的问题,但我会创建一个局部变量并设置它。然后在linq查询中使用局部变量

这样做是因为每次调用where子句时,都会在查询中计算DateTime.Now。因此,对于inactiveAccounts中的每个条目,您都在使用另一个DateTime

此外,如果要比较没有时间值的日期,则应使用


您可以直接使用它:

var inactiveAccounts = (from entry in ent.Accounts
                        where entry.Status == 0 && entry.DeactivationDate < DateTime.Now                  
                        select entry).ToArray();
因为DataTime.Now和DateTime.UtcNow被转换为=它们不应该在.NET端进行计算,而是分别转换为etdate或GETUTCDATE SQL函数调用

您的问题的其余部分无法回答,因为提供以下信息

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


如果你想得到问题的答案,包括哪些时段导致问题,使用了哪些时区等,你必须花更大的精力分析问题。通常我们不会帮你,因为我们看不到你的数据。这也不是EF的问题,因为在您的例子中,它完全发生在linq to object=plain.NET代码中。

BTW:很少有用例使用DateTime.Now是存储在数据库中或与数据库中的值进行比较的正确值。在几乎所有情况下,您都应该使用DateTime.UtcNow来避免夏令时更改期间出现问题,因为时间可能会倒退!不,我也要比较时间,在这个例子中是DateTime。现在一直调用不是问题,因为几乎没有记录,即使所有时间都是DateTime。现在是新日期,这不是问题。。。还有其他想法吗?这对我来说真的很奇怪,因为当我打印出值时,一切似乎都很正常。它发生在19:30到08:00之间。本地时间格式为h:mm:ss tt,日期格式为M/d/yyyy。。。让我知道哪些附加数据可能有用
var inactiveAccounts = (from entry in ent.Accounts
                        where entry.Status == 0 && entry.DeactivationDate < DateTime.Now                  
                        select entry).ToArray();