Datetime RavenDB:查找范围内最近的日期

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

我试图查询与我传递给我的查询的日期最接近的文档。 问题是RavenDB无法翻译我的查询:

InvalidOperationException:无法理解如何翻译Abs

以下是我正在尝试的查询:

_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这将需要检查数据库中的所有数据。 相反,执行两个查询。 第一个日期等于或小于日期。 第一个值等于或大于日期


然后选择最接近的。

我根据你的答案更新了我的帖子。您是否看到了这方面的任何问题或改进?您可以通过使用惰性查询更进一步,这样您只需向服务器发出一个请求。请参阅: