Я верю, что вы действительно можете делать то, что просите. Вы можете восстановить счет и страницу за один раз в коде, но не в одном операторе SQL. На самом деле два запроса отправляются в базу данных, но в одном цикле, и результаты извлекаются в виде массива из 2 элементов. Одним из элементов является общее число в виде целого числа, а вторым - IList ваших найденных объектов.
Есть 2 способа сделать это:
- MultyQuery
- Многокритериальные
Вот пример, взятый по ссылкам ниже:
IList results = s.CreateMultiQuery()
.Add("from Item i where i.Id > :id")
.Add("select count(*) from Item i where i.Id > :id")
.SetInt32("id", 50)
.List();
IList items = (IList)results[0];
long count = (long)((IList)results[1])[0];
Вот больше информации о том, как вы можете это сделать. Это действительно прямо вперед.
http://ayende.com/Blog/archive/2006/12/05/NHibernateMutliQuerySupport.aspx
http://ayende.com/Blog/archive/2007/05/20/NHibernate-Multi-Criteria.aspx
Если вы прочтете 2 статьи выше, вы увидите, что использование этого подхода дает выигрыш в производительности, который добавляет ценность в любом случае более прозрачному и ясному подходу к подкачке страниц с помощью MultiQuery и MultiCriteria по сравнению с обычным способом.