私は素晴らしいページングソリューションをセットアップしようとしているMVCプロジェクトを持っています。NHibernate - 動的QueryOverパラメータ
SQL Serverに、私がページングできるようにしたい数千の行を持つテーブルがいくつかあります。ページングに適用するフィルタがない場合は、うまく動作します。これは私がそれを行うために使用している方法である:
public virtual PagedList<T> GetPagedData(int startIndex, int count) {
var rowCount = session.CreateCriteria(typeof(T)).SetProjection(Projections.RowCount()).FutureValue<Int32>().Value;
var pageOfItems = session.CreateCriteria(typeof(T)).SetFirstResult(startIndex).SetMaxResults(count).List<T>();
return new PagedList<T>(pageOfItems, startIndex, count, rowCount);
}
私もさらにダウン結果を絞ると、新しいページングテーブルを返すために、クエリに渡す機能が欲しいです。私はこれまで持っていることである。これに
public virtual PagedList<T> GetPagedData<T>(int startIndex, int count, System.Linq.Expressions.Expression<Func<T, bool>> predicate) where T : class {
var rowCount = session.QueryOver<T>().Where(predicate).Select(Projections.RowCount()).FutureValue<Int32>().Value;
var pageOfItems = session.QueryOver<T>().Where(predicate).Skip(startIndex).Take(count).List<T>();
return new PagedList<T>(pageOfItems, startIndex, count, rowCount);
}
コールは次のようになります:
問題があるnetworks = mRepository.GetPagedData<Network>(page ?? 1, pageSize, x => x.Name.Contains(q));
、それが表現「が含まれて」好きではありません。完全に一致すれば、それは正常に動作しますが(x.Name == q)、後の結果は得られません。
私が使用して見ている例外は、 "入って" です。
認識されていないメソッド呼び出し:誰がどのようにアイデアを持っています
ブールが含まれています(可能System.String):可能System.Stringこのような表現を動的に受け入れるには?私はこれを置いたベースリポジトリクラスを持っています、なぜなら私はいくつかの他のテーブルに対して同じタイプの振る舞いを使うからです。私はテーブルごとに別々のメソッドを書くことができましたが、可能ならば動的にやります。
アドバイスありがとうございます!
アドバイスをいただきありがとうございます。これは完璧に機能しました。今後のクエリの使用方法については、その記事を参照していきますが、その間にうまく機能することを嬉しく思っています。 – Brosto