2012-06-22 30 views
3

鑑於這樣的記分板:即,(同分和用戶允許)RavenDB查詢記分板

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 

I D想查詢文檔對一個特定分數,並得到下面和上面

X結果例如說我想要將user2的分數設爲998,並且獲得2以上和2以下的分數

日期在那裏但不影響查詢,當新分數進來並且存在相同的值時,它將被包括下面。

什麼是最好的方式去呢?

此刻我正在做更糟糕的事情,那就是有三個查詢:一個獲得我正在尋找的分數,然後另外兩個獲取上下的一些行。 我已經看到了一些探討GG,但我不能做任何有意義的工作,希望發帖的問題在這裏是確定

更新:也有這個線程在discussion group,但它似乎並沒有解決這個問題無論是。

感謝

回答

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

現在這兩個查詢將在單個請求中針對數據庫發出。