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 つ下を取得するとします。

日付はありますが、クエリには影響しません。新しいスコアが入って同じ値が存在する場合は、以下に含まれます。

それを行う最善の方法は何ですか?

つまり、3 つのクエリを使用します。1 つは探しているスコアを取得し、もう 2 つは上下の行を取得します。GGに関する議論を見てきました が、意味のあることは何もできません。うまくいけば、ここに質問を投稿しても問題ありません

更新:ディスカッション グループにもこのスレッドがありますが、解決していないようです。

ありがとう

4

1 に答える 1

2

Miau さん、選択肢はありません。2 つのクエリに絞り込むことができます。

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();

これで、両方のクエリが単一のリクエストでデータベースに対して発行されます。

于 2012-06-24T05:01:30.190 に答える