Например, я хочу заполнить элемент управления gridview на веб-странице ASP.NET только данными, необходимыми для # отображаемых строк. Как NHibernate может это поддерживать?
107
Например, я хочу заполнить элемент управления gridview на веб-странице ASP.NET только данными, необходимыми для # отображаемых строк. Как NHibernate может это поддерживать?
ICriteria
имеет SetFirstResult(int i)
метод, который указывает индекс первого элемента, который вы хотите получить (в основном первая строка данных на вашей странице).
У него также есть SetMaxResults(int i)
метод, который указывает количество строк, которые вы хотите получить (т. Е. Размер вашей страницы).
Например, этот объект критериев получает первые 10 результатов вашей сетки данных:
criteria.SetFirstResult(0).SetMaxResults(10);
Вы также можете воспользоваться функцией Futures в NHibernate для выполнения запроса, чтобы получить общее количество записей, а также фактические результаты в одном запросе.
пример
Чтобы получить общее количество записей, сделайте следующее:
Хорошее обсуждение того, что дает вам Futures, здесь .
источник
Начиная с NHibernate 3 и выше, вы можете использовать
QueryOver<T>
:Вы также можете явно упорядочить свои результаты следующим образом:
источник
.Skip(PageNumber * PageSize)
таким образом, если размер страницы равен 10, первые 10 строк никогда не будут получены. Я редактирую, чтобы формула была правильной. Предполагая, что концептуальноPageNumber
не должно быть 0. Это должно быть минимум 1.Есть ли другой способ получить типизированный результат из MultiCriteria при разбиении на страницы данных, или все делают то же самое, как и я?
Спасибо
источник
Как насчет использования Linq для NHibernate, как описано в этой записи блога Айенде?
Пример кода:
А вот подробный пост в блоге команды NHibernate о доступе к данным с помощью NHibernate, включая реализацию разбиения на страницы.
источник
Скорее всего, в GridView вы захотите отобразить фрагмент данных плюс общее количество строк (rowcount) от общего объема данных, соответствующих вашему запросу.
Вы должны использовать MultiQuery для отправки запросов Select count (*) и .SetFirstResult (n) .SetMaxResult (m) в вашу базу данных за один вызов.
Обратите внимание, что результатом будет список, содержащий 2 списка: один для среза данных, а другой - для подсчета.
Пример:
источник
Я предлагаю вам создать определенную структуру для разбивки на страницы. Что-то вроде (я программист на Java, но это должно быть легко сопоставить):
Я не предлагал реализацию, но вы можете использовать методы, предложенные @Jon . Вот вам хорошее обсуждение .
источник
Вам не нужно определять 2 критерия, вы можете определить один и клонировать его. Чтобы клонировать критерии nHibernate, вы можете использовать простой код:
источник