C# 比较linq中的DateTime与sql server ce的最简单方法是什么?

C# 比较linq中的DateTime与sql server ce的最简单方法是什么?,c#,entity-framework,linq,sql-server-ce-4,C#,Entity Framework,Linq,Sql Server Ce 4,我有一个sql server ce 4数据库,它有一个名为EndDate的DateTime?列的表。当我删除一条记录时,我设置了这个结束日期,当我想检索一个记录列表时,我想通过在结束日期应用过滤器来过滤所有已删除的记录 我使用实体框架通过linq应用这个过滤器 我的linq查询如下所示: protected IDbSet<TEntity> Entities; ... Entities.AsNoTracking().AsQueryable() .Where(entity =>

我有一个sql server ce 4数据库,它有一个名为EndDate的
DateTime?
列的表。当我删除一条记录时,我设置了这个结束日期,当我想检索一个记录列表时,我想通过在结束日期应用过滤器来过滤所有已删除的记录

我使用实体框架通过linq应用这个过滤器

我的linq查询如下所示:

protected IDbSet<TEntity> Entities;
...
Entities.AsNoTracking().AsQueryable()
  .Where(entity => !entity.EndDate.HasValue || entity.EndDate.Value > DateTime.UtcNow);
受保护的IDbSet实体;
...
Entities.AsNoTracking().AsQueryable()
.Where(entity=>!entity.EndDate.HasValue | | entity.EndDate.Value>DateTime.UtcNow);
当我执行此linq查询时,我得到以下错误:

SQL Server Compact不支持函数“CurrentUtcDateTime”

搜索这个错误告诉我(如果我理解正确的话)我不能使用DateTime.UtcNow

我的问题是:达到我试图达到的目标的替代方法是什么


我可以通过linq使用其他功能吗?或者我应该使用更原始的解决方案,将日期时间转换为一个历元并进行比较?

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

一旦实际查询了数据,Linq就会创建SQL来执行该任务并将其发送到数据库,而该SQL无法确定UTC是什么

一个客户机选项是通过将数据取下,然后过滤出来,使其具体化,例如:

Entities.AsNoTracking().ToList()
                       .Where(entity => !entity.EndDate.HasValue 
                                             || entity.EndDate.Value > DateTime.UtcNow);
它将通过
ToList
工作,使数据可用于运行时。当然,成本是将所有要在客户机中过滤的值降低。如果是小的,那就好了,如果是几千条记录;不建议



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

您是否尝试过
var now=DateTime.UtcNow然后
。。。entity.EndDate.Value>now)?entity.EndDate.Value.CompareTo(otherDate)查找比较谢谢Igor,这就成功了。我想我试过了,但我想我没有。我仍然想知道为什么var被接受而属性不被接受?有什么想法吗?