将linq中的DateTime与sql server ce进行比较的最简单方法是什么?

时间:2017-04-18 20:50:19

标签: c# entity-framework linq sql-server-ce-4

我有一个sql-server-ce 4数据库,其中有一个名为EndDate的my-input列的表。当我删除记录时,我设置了此enddate,当我想要检索记录列表时,我想通过在enddate上应用过滤器来过滤所有已删除的记录。

我使用实体框架通过linq应用此过滤器。

我的linq查询如下所示:

DateTime?

当我执行此linq查询时,我收到以下错误:

  

功能' CurrentUtcDateTime' SQL Server Compact不支持。

搜索此错误告诉我(如果我已正确理解)我无法使用DateTime.UtcNow。

我的问题是:达到我试图达到的目标的另一种方法是什么?

我可以通过linq使用不同的功能吗?或者我应该使用更原始的解决方案,我还将日期时间转换为Epoch并进行比较?

1 个答案:

答案 0 :(得分:0)

问题是代码示例 operation 不是操作的本地,因为它是IQueryable状态,这意味着它还没有被执行并被制作成具体数据过程可以使用。这允许在需要时通过其他操作(例如另一个Where子句)调整查询。

实际查询数据后,Linq创建SQL来完成该工作并发送到数据库,并且SQL无法确定UTC.Now是什么。

一个客户端选项是使数据具体化,将其删除然后将其过滤掉,如:

Entities.AsNoTracking().ToList()
                       .Where(entity => !entity.EndDate.HasValue 
                                             || entity.EndDate.Value > DateTime.UtcNow);

将通过ToList工作,使数据可用于运行时。成本当然会降低客户端中要过滤的所有值。如果这个很小,那就好了,如果有数千条记录的话;不建议。

否则,数据库选项是创建存储过程以关闭所需的记录,或者添加一个计算列字段,该字段返回所需测试的布尔值。