レコードの範囲を選択するLinq

linq pagination paging sql-server-2008
レコードの範囲を選択するLinq
    var q = (from Comments in db.tblBlogComments where Comments.blogID == this.ID orderby Comments.date descending select new {
        Comments.userID, Comments.comment, Comments.date
    });

これにより、関連するすべてのレコードが返されます。冗長データをロードしないように、レコード#10から#20のみを選択するのが最善です。

  2  0


ベストアンサー

どうですか?

var q = (
from Comments in db.tblBlogComments
where Comments.blogID == this.ID
orderby Comments.date descending
select new { Comments.userID, Comments.comment, Comments.date }).Skip(10).Take(10);

4


結果セットで `.Skip()`および `.Take()`メソッドを使用できます。 例:

var q = (from Comments in db.tblBlogComments where Comments.blogID == this.ID orderby Comments.date descending select new {
    Comments.userID, Comments.comment, Comments.date
});

そしてそれを使う:

int pageSize = 10;
int page = 3;
var currentPage = q.Skip((currentPage - 1) * pageSize).Take(pageSize);

その後

foreach(var item in currentPage)
{
    ...
}

Linqは遅延実行を使用するため、実際のクエリはforeachループ中に作成および実行されます*。 そのため、SQLクエリは現在のページのレコードのみを返します。

編集:http://msdn.microsoft.com/en-us/library/bb386988.aspx [この件に関する詳細]

2


int start = 10;
int end = 20;
var q = (from Comments in db.tblBlogComments
            where Comments.blogID == this.ID
            orderby Comments.date descending
            select new {
                          Comments.userID,
                          Comments.comment,
                          Comments.date
                       }).Skip(start).Take(end - start);

`Skip`がデータベースで実行されるSQLに変換されるかどうかはわかりませんので、これはそれほど効率的ではないかもしれません。

0


タイトルとURLをコピーしました