IQueryable を返すメソッドは必要ありませんでしたが、ページング クエリをメモリではなくデータベースで実行したいと考えていました。この記事では、IQueryable を介してデータのサブセットのみを公開する方法について説明します。
記事にあるGetRangeメソッドを以下のように修正しました。
public IEnumerable<T> GetRange<TKey>(int page, int pageSize, Expression<Func<T, TKey>> keySelector, bool ascending )
{
IOrderedQueryable<T> sourceOrdered = null;
sourceOrdered = ascending ? source.OrderBy(keySelector) : source.OrderByDescending(keySelector);
return sourceOrdered.Skip((page - 1) * pageSize).Take(pageSize);
}
そして、以下のように contrib IPagination を渡します。
var productPagedList = productList.GetRange(page ?? 1, 10, p => p.SupplierID, false)
.AsPagination(page ?? 1, 10);
ただし、グリッドは、ページャーを適切にレンダリングするために、合計レコード数を知る必要があります。このようにサービス層から公開された IQueryable のサブセットで MVCContrib グリッドを動作させる方法はありますか? または、どういうわけか、総レコード数をそれにフィードしますか? または他のヒントはありますか?
ありがとう