3

给定这样的记分牌:即(允许相同的分数和用户)

user    |  score  |  date

user1   |   1000  | 10-05-2012
user1   |    999  | 10-05-2012
user2   |    998  | 10-05-2012
user1   |    998  | 10-05-2012
user4   |    987  | 10-05-2012

我想查询文档以获取特定分数并获得低于和高于 x 的结果

例如说我想以分数 998 为目标 user2 并获得 2 以上和 2 以下

日期在那里但不影响查询,当新分数进入并且存在相同的值时,它将包含在下面。

最好的方法是什么?

目前我正在做最糟糕的事情,那就是有三个查询:一个得到我正在寻找的分数,然后另外两个得到上面和下面的一些行。我看过一些关于GG的讨论, 但我无法做出任何有意义的工作,希望在这里发布问题是可以的

更新:讨论组中也有这个线程,但似乎也没有解决它。

谢谢

4

1 回答 1

2

Miau,你真的别无选择,你可以把它放到两个查询中:

var q1 = session.Query<Score>().Where(x=>x.Value >= 998).OrderBy(x=> x.Value).Take(3).ToList();
var q2 = session.Query<Score>().Where(x=>x.Value < 998).OrderByDescending(x=> x.Value).Take(3).ToList();

您可以通过使用惰性查询来改进它:

var q1 = session.Query<Score>().Where(x=>x.Value >= 998).OrderBy(x=> x.Value).Take(3).Lazily();
var q2 = session.Query<Score>().Where(x=>x.Value < 998).OrderByDescending(x=> x.Value).Take(3).Lazily();

现在,两个查询都将在一个请求中针对 db 发出。

于 2012-06-24T05:01:30.190 回答