我试图查询最接近我传递给我的查询的日期的文件。 问题是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;
答案 0 :(得分:0)
这需要遍历db中的所有数据。 相反,做两个查询。 一个让第一个等于或小于日期。 一个让第一个等于或大于日期。
然后选择最接近的。