c# - LINQ to EF4 日期时间比较问题

标签 c# sql-server-2008 entity-framework

我在将 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(); 

并且在一天中的某些时间我没有得到正确的记录。

我怀疑这是由于 where 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(); 

关于c# - LINQ to EF4 日期时间比较问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7411355/

相关文章:

c# - 将控件可见性绑定(bind)到 ViewModel 属性不起作用

c# - 如何在文件中存储自定义结构的数组?

sql - HH :MM:SS:Msec to HH:MM:SS in stored procedure

sql - 如何在数据库中查找最后一次修改

c# - 按名字/姓氏组合搜索时遇到问题

c# - 尝试将字节数组插入数据库时​​从 varchar 隐式转换为 varbinary 错误

sql - SQL Server Management Studio 中的查询成本

linq - 使用LINQ包含嵌套实体

c# - 当 POCO 文件位于单独的项目中时将 EF 指向数据库

c# - 奇怪的行为 C# 与 Python 字节操作