Linq выбирает диапазон записей - PullRequest
2 голосов
/ 07 марта 2011
    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, чтобы я не загружал лишние данные?

Ответы [ 3 ]

4 голосов
/ 07 марта 2011

Как насчет:

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);
2 голосов
/ 07 марта 2011

Вы можете использовать методы .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-запрос будет возвращать только записи для текущей страницы.

Редактировать: Подробнее об этом *

0 голосов
/ 07 марта 2011
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, выполняемый в базе данных, поэтому это может быть не так эффективно.

...