システム内の場所の検索ページを完成させようとしています。これは私のグリッドでページングをセットアップしようとした初めてのことです。SetMaxResultsも設定されている場合、NHibernateのSetFirstResult(0)メソッドは0行を返します
私はFluent Nhibernate
を使用しており、SQL 2008データベースからデータを取得しています。
私がcriteria.SetFirstResult(0).SetMaxResults(10);
を使用している場合、私はデータを受け取っていません。私はデータベースをプロファイリングしていますが、検索を行うSQLが今までどおり起きているようには見えません。ステートメントをcriteria.SetFirstResult(1).SetMaxResults(10);
に変更すると、グリッドに2〜11行目が表示され、プロファイラで生成されたSQLが表示されます。 SetMaxResults
が任意の値に設定されている場合、なぜcriteria.SetFirstResult(0)
が機能しないのか分かりませんか?
私は以下の流暢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サーバー2008データベースを使用しています。 –
私が知る限り、criteria.SetFirstResult(0)はそれを省略したのと同じ効果があります。あなたはクエリを2回実行しているようです。一度だけカウントを取得し、もう一度ページングに基づいて結果を制限します。あなたはそれを行うページングの目的を破っています。 – Vadim