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

时间:2015-01-27 10:27:55

标签: datetime ravendb

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

  

InvalidOperationException:无法理解如何翻译Abs

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

_session.Query<ExchangeRate>().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;

1 个答案:

答案 0 :(得分:0)

这需要遍历db中的所有数据。 相反,做两个查询。 一个让第一个等于或小于日期。 一个让第一个等于或大于日期。

然后选择最接近的。