2009-07-09 2 views
13

私が見つけたASP.NET MVCページングソリューションのほとんどは、IEnumerableコレクションの形式でデータベーステーブルからすべての行を取得し、IEnumerableコレクションでページング変換を実行してから、結果をビュー。私はDB側でページングできるようにしたいが、まだページ番号の計算とHTML生成を行うページングクラスをいくつか持っている。これを行うソリューションがありますか?または私が見てきたものはこれを行うが、私は彼らが間違っていると見ているので、私はそれを見ていないよ?データベースにページングを行うASP.NET MVC用のページングソリューションはありますか?

は、ここで私が見てきたものです:

+0

これは本当にASP.NET MVC ... –

+0

あなたが正しいとは何の関係もありませんが、私はdidnのjvanderhとCraigの答えの後までこれを知っている。混乱をおかけして申し訳ありません。 – gabe

答えて

14

GuのNerdinnerサンプルを見てください。

var upcomingDinners = dinnerRepository.FindUpcomingDinners(); 
var paginatedDinners = upcomingDinners.Skip(10).Take(20).ToList(); 

にもかかわらずFindUpcomingDinners()を使用すると、次の行にToListメソッド()を呼び出すまで、クエリがデータベースで実行されていないすべての開催の夕食会を取得します。そしてそれは10行をスキップした後、
を次の20にしただけです。

+0

に変換しないので、私はサンプラーをチェックアウトします。 ああ、わかりました。あなたの最後の文が私を大きく悟った!たくさん! – gabe

+0

サンプル全体をチェックアウトすることをお勧めしますが、私が提供したリンクは、IQueryableの動作をより詳しく説明する章です。 – jvanderh

+0

私はこれをコメントしています – gabe

5

あなたは間違っています。 PagedListは、IQueryable拡張機能を備えているため、DBサーバー上でそれを行います。

+0

コントローラーアクションの構文は何でしょうか?私が見てきたことは、productRepository.GetAllProducts()。ToPagedList(pageIndex、pageSize)のようなことです。 – gabe

+1

はい、そうです。選択されたページのみ**をIEnumerableに変換します。ページングは​​IQueryableを介してDBサーバー上で行われます。カウントのための同点。 –

+1

私の問題は、IQueryableが何をしたのか分からなかったことです(つまり、「遅延実行」)。あなたのコメントだけでなく、他の人も私に正しい方向を教えてくれました。どうも! – gabe

3

ScottGuは、LINQをAsp.Net(MVCを含む)で使用することについて非常に優れたマルチパートのブログシリーズを持っています。第1回からシリーズ全体を読むことをお勧めしますが、Part 3は探しているものをカバーしています。「クエリ結果をページングする」セクションでは、特にデータベースのページングについて扱っています。

2

@StartPageと@PageSizeパラメータをとるストアドプロシージャを実装する方が効率的ではありませんか?

あなただけ実際にあなたが作成するどのように多くのページのリンクを知っていると、各リンクのonclickイベントが通過するように、ちょうどtotalCountプロパティと呼ばれるoutパラメータまたは類似した何かを持っている

を使用しているデータのサブセットを取得しているこの方法は、非同期

簡単に、より多くのデータを持つdiv要素や他のHTML要素をロードするJavaScript関数にページ番号

+0

LINQはSkip()とTake()で同じことをします。あなたのデータに多数のアプリケーションがアクセスする場合は、ストアドプロシージャを使用することをお勧めします。そうしないと、LINQの実装、読み込み、およびデバッグがずっと簡単になります。 – jrjensen

関連する問題