私はそのようなPredicateBuilder
ものを返す式を持っていますIQueryable
(不自然な例):
var predicate = PredicateBuilder.True<CoolEntity>();
predicate = predicate.And(x => x.id > 0);
IQueryable<CoolEntity> results = CoolEntityRepository
.FindBy(predicate)
.OrderByDescending(x => x.id);
CoolEntity
次に、これを使用して、次のようなエンティティの MVC インデックス コントローラーを使用して、特定のページの結果のみを含むページ分割されたリストを生成します。
int total = results.Count(); //Used by my controller to show the total number of results
int pageNumber = 2;
int pagesize = 20;
//Only get the entities we need for page 2, where there are 20 results per page
List<CoolEntity> resultList = results
.Skip(pageNumber * pageSize)
.Take(pageSize)
.ToList()
リポジトリを介して SQL データベースから返される何千ものレコードがあるため、このクエリにより、各ページに関連する結果のみが返されることが保証されます。それはうまく機能しています。
問題は、インデックスのページ分割されたページのどれを特定のエンティティに返す必要があるかを確認できるようにしたいということです。たとえば、私の CoolEntity オブジェクトの 1 つが 5 の ID を持っているとpageNumber
します。そのエンティティがインデックス コントローラーに表示されるページ分割されたページをロードしたい場合、必要な値をどのように判断できますか?
具体的には、results
ID 5 のエンティティが 651 行目であることを確認するにはどうすればよいでしょうか。その結果、この番号を使用してpageNumber
(つまりMath.Ceiling(651/pagesize)
、同様のことを) 判断できますか? これに対するより良いアプローチはありますか?