Я использую jqGrid для отображения данных, полученных с помощью NHibernate. jqGrid делает пейджинг для меня, я просто говорю NHibernate, чтобы получить "count" строк, начиная с "n".
Кроме того, я хотел бы выделить конкретную запись. Например, в списке сотрудников я бы хотел, чтобы конкретный сотрудник (идентификатор) был показан и предварительно выбран в таблице.
Проблема в том, что этот сотрудник может быть на текущей странице. Например. Я отображаю 20 строк из 0, но «выделенный» сотрудник - № 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 может оптимизировать запрос, потому что порядок не определен ... в этом случае я получу предсказуемый результат только в том случае, если я потяну ALL данные запроса один раз , а затем программно в C # будет разрезать указанную часть результатов запроса, чтобы второй запрос не выполнялся. Но это будет намного медленнее, конечно.
Или есть другой способ?