我需要做到这一点(currenttimestamp-createtimestamp)>(以小时为单位的间隔)。我用下面的代码试过,没能实现并得到一个异常。linq to entities无法识别方法“system.timespan subtract(system.datetime)”方法,并且此方法无法转换为存储表达式
DateTime now = DateTime.Now - new TimeSpan(0, 1, 0) + new TimeSpan(0, 1, 0);
return query.Where(m => now.Subtract(m.create_timestamp) >= m.interval);
4条答案
按热度按时间kse8i1jr1#
我认为linqto实体不能将timespan的比较转换为sql查询。也许您应该使用system.data.entity中的dbfunctions来比较时间跨度,或者使用ef core。
这是使用dbfunctions的示例
ecbunoof2#
为什么不使用datetime.compare?文件
hfyxw5xn3#
bogh5gae4#
只要你连接
IQueryable<...>
linq语句,属性Expression
iqueryable的属性已更改。只有在执行iqueryable(使用tolist、foreach、firstordefault、any等)时,表达式才会发送到IQueryable<...>.Provider
谁将在执行查询之前将表达式转换为sql。异常消息表示您的提供商不知道
DateTime.Subtract
. 这在一定程度上取决于您使用的提供者(microsoft、sqlite、mysql、mongo等等),但大多数提供者都不知道“datetime.subtract”。熟悉受支持和不受支持的linq方法(linq到实体)的列表,以及dbfunctions类。后者包含几种使用时间跨度进行计算的方法。
显然,您现在需要createtimestamp+interval<=的所有项
如果您的提供商不支持此功能,请考虑使用
DbFunctions.AddSeconds
以及DbFunctions.DiffSeconds
(或毫秒,或天,任何你需要的分辨率。