我有一個表中的用戶列表,當在表上執行搜索時,我希望以搜索關鍵字開頭的用戶名顯示在列表頂部,其次是擁有在其用戶名中搜索關鍵字。按優先級排序nhibernate或sql server
例如,考慮用戶名列表:
rene
irene
adler
leroy
Argog
harry
evan
我提供的「建議」,在搜索框中的用戶類型,當他們試圖尋找其他用戶。如果用戶在搜索框中鍵入va
,他們往往會尋找用戶vain
,但由於我按用戶名排序,升序排列,evan
總是排在最前面。我會想是訂購像這樣:
尋找VA
vain
evan
尋找重新
rene
Irene
搜索AR
Argog
harry
當然,如果他們再輸入一個字符,它會進一步縮小。
想一想,這就是我想要做的 - 把用搜索鍵開頭的用戶名放在最上面(如果多個用戶名以搜索鍵開頭,按字母順序排序)。然後,如果所需數量的用戶名未完成,請按字母順序追加包含搜索關鍵字的其他用戶名。
我分頁的SQL本身的結果 - 我用nhibernate查詢執行任務。通過if the required number of usernames isn't complete
,我的意思是如果頁面大小爲10,並且我只有7個用戶名,請在其中包含包含searchkey的其他用戶名。
我目前無法看到在一個查詢中執行所有操作的方法。是否必須將查詢分爲兩部分並聯系db兩次以完成此操作?或者有什麼方法可以排序字符串的位置?
任何有關如何有效地做到這一點的提示將是非常有用的。 - 我甚至不能想到在普通的SQL中會這樣做的查詢。
謝謝。
解決方案
的accepted answer把我推在正確的方向,這是最終爲我工作:
.OrderBy(Projections.Conditional(
Restrictions.Where(r => r.Username.IsLike(searchKey + "%")),
Projections.Constant(0),
Projections.Constant(1))).Asc();
啊,這是一個非常有趣的解決這個問題的辦法,謝謝,我會考慮這個轉換現在查詢過。謝謝! – LocustHorde