Datetime RavenDB:查找范围内最近的日期
我试图查询与我传递给我的查询的日期最接近的文档。 问题是RavenDB无法翻译我的查询: InvalidOperationException:无法理解如何翻译Abs 以下是我正在尝试的查询:Datetime RavenDB:查找范围内最近的日期,datetime,ravendb,Datetime,Ravendb,我试图查询与我传递给我的查询的日期最接近的文档。 问题是RavenDB无法翻译我的查询: InvalidOperationException:无法理解如何翻译Abs 以下是我正在尝试的查询: _session.Query<ExchangeRate>().OrderBy(d => Math.Abs((date - d.TimeStamp).Ticks)).First(); \u session.Query().OrderBy(d=>Math.Abs((date-d.TimeSt
_session.Query<ExchangeRate>().OrderBy(d => Math.Abs((date - d.TimeStamp).Ticks)).First();
\u session.Query().OrderBy(d=>Math.Abs((date-d.TimeStamp.Ticks)).First();
如果RavenDB无法翻译这些数学函数,那么还有什么其他选项可以编写这种类型的查询
更新1
根据Ayende的回答,我尝试了以下似乎有效的方法,不确定这是否是最好的解决方案。它还考虑到如果日期超出了可用数据的范围,则只返回null以由调用代码处理
var rateBefore = _session.Query<ExchangeRate>()
.Where(x => x.TimeStamp.Date <= date.Date)
.OrderByDescending(x => x.TimeStamp)
.FirstOrDefault();
var rateAfter = _session.Query<ExchangeRate>()
.Where(x => x.TimeStamp.Date >= date.Date)
.OrderBy(x => x.TimeStamp)
.FirstOrDefault();
if (rateBefore == null || rateAfter == null)
return rateBefore ?? rateAfter;
var beforeDiff = Math.Abs(rateBefore.TimeStamp.Ticks - date.Ticks);
var afterDiff = Math.Abs(rateAfter.TimeStamp.Ticks - date.Ticks);
return beforeDiff <= afterDiff ? rateBefore : rateAfter;
var ratefore=\u session.Query()
.其中(x=>x.TimeStamp.Date x.TimeStamp)
.FirstOrDefault();
var ratefafter=\u session.Query()
.其中(x=>x.TimeStamp.Date>=Date.Date)
.OrderBy(x=>x.TimeStamp)
.FirstOrDefault();
如果(rateBefore==null | | rateAfter==null)
之前的退货率??rateAfter;
var beforeDiff=Math.Abs(ratebever.TimeStamp.Ticks-date.Ticks);
var afterDiff=Math.Abs(ratafter.TimeStamp.Ticks-date.Ticks);
return beforeDiff这将需要检查数据库中的所有数据。
相反,执行两个查询。
第一个日期等于或小于日期。
第一个值等于或大于日期
然后选择最接近的。我根据你的答案更新了我的帖子。您是否看到了这方面的任何问题或改进?您可以通过使用惰性查询更进一步,这样您只需向服务器发出一个请求。请参阅: