Я пытался заполнить страницу поиска для местоположений в моей системе. Это мой первый раз, пытаясь настроить пейджинг в моей сетке.Метод SetFirstResult (0) NHibernate возвращает 0 строк, когда SetMaxResults также задано
Я использую Fluent Nhibernate
и извлекаю данные из базы данных SQL 2008.
Когда я использую criteria.SetFirstResult(0).SetMaxResults(10);
, я не получаю данные назад. Я профилирую базу данных, и это не похоже на то, что SQL выполняет поиск, когда-либо происходящий. Когда я меняю оператор на criteria.SetFirstResult(1).SetMaxResults(10);
, я вижу строки 2-11 в моей сетке, и я могу видеть sql, который был сгенерирован через профилировщик. Кто-нибудь знает, почему criteria.SetFirstResult(0)
не работает, когда SetMaxResults
настроено на любое значение?
Я прилагаю свободно NHibernate
код ниже:
public LocationSearchResults Search(string text, int pageNumber, int pageSize, string orderBy, string orderByDirection)
{
var criteria = Session.CreateCriteria(typeof(Location));
var dis = Restrictions.Disjunction();
dis.Add(Restrictions.Like("LocationName", text, MatchMode.Anywhere));
dis.Add(Restrictions.Like("LocationAddress", text, MatchMode.Anywhere));
dis.Add(Restrictions.Like("LocationCity", text, MatchMode.Anywhere));
dis.Add(Restrictions.Like("LocationState", text, MatchMode.Anywhere));
dis.Add(Restrictions.Like("LocationZip", text, MatchMode.Anywhere));
criteria.Add(dis);
LocationSearchResults results = new LocationSearchResults();
results.NumberOfResults = criteria.List<Location>().Count;
if (orderByDirection == "asc")
{
criteria.AddOrder(Order.Asc(orderBy));
}
else
{
criteria.AddOrder(Order.Desc(orderBy));
}
//criteria.SetFirstResult((pageNumber - 1) * pageSize).SetMaxResults(pageSize);
criteria.SetFirstResult(0);
criteria.SetMaxResults(10);
results.SearchResults = (List<Location>)criteria.List<Location>();
return results;
}
#endregion
Важно знать, к какой базе данных вы ориентируетесь. Свободный не здесь. –
Я использую базу данных SQL Server 2008. –
Насколько я знаю, критерий.SetFirstResult (0) имеет тот же эффект, что и его удаление. Кажется, вы выполняете запрос дважды. Однажды, чтобы получить счет и еще раз, чтобы ограничить результаты на основе пейджинга. Вы побеждаете цель пейджинга, делая это. – Vadim