我使用jqGrid來顯示使用NHibernate檢索的數據。 jqGrid爲我做分頁,我只是告訴NHibernate從「n」開始的「count」行。jqGrid/NHibernate/SQL:導航到選定的記錄
此外,我想強調具體的記錄。例如,在員工列表中,我希望特定的員工(id)在表格中顯示和預選。
問題是此員工可能在非當前頁面上。例如。我從0顯示20行,但「高亮顯示」員工是#25,並在第二頁。
可以將初始頁面傳遞給jqGrid,因此,如果我以某種方式使用NHibernate來查找「高亮顯示」員工所在的頁面,它將只導航到該頁面,然後使用.setSelection(id )jqGrid的方法。
所以,問題被縮小到這個問題:給出特定的搜索查詢,如下所示,我如何告訴NHibernate計算「高亮」員工所在的頁面?
示例查詢(簡體):
var query = Session.CreateCriteria<T>();
foreach (var sr in request.SearchFields)
query = query.Add(Expression.Like(sr.Key, "%" + sr.Value + "%"));
query.SetFirstResult((request.Page - 1) * request.Rows)
query.SetMaxResults(request.Rows)
在這裏,我需要改變(計算)request.Page,以便它指向的地方request.SelectedId是頁面。
另外,有趣的是,如果未定義排序順序,當我運行搜索查詢兩次時,是否會得到相同的結果?我會說,SQL Server 可能優化查詢,因爲訂單沒有定義...在這種情況下,我只會得到可預見的結果,如果我拉全部查詢數據一旦,然後將以編程方式在C#切片查詢結果的指定部分 - 以便不發生第二個查詢。但它當然會慢得多。
或者,有沒有另一種方法?
不知道該怎麼辦,我得到的ID之前下訂單的數量?如果查詢按id排序很容易,但它通常按名稱或類似的順序進行排序......目前,我將只從服務器獲取ID列表(同時仍然進行排序和過濾),並在其中執行IndexOf(id) 。 – queen3 2009-12-16 08:37:16
如果按名稱排序,則需要查找id的名稱並限制爲小於或大於(取決於排序方向)該行的名稱和計數的行。 – dotjoe 2009-12-16 14:28:42
如果有幾個相同的名字?這是通向地獄的道路;-) – queen3 2009-12-16 15:57:04