LINQ to SQL и DataPager - PullRequest
       17

LINQ to SQL и DataPager

0 голосов
/ 12 июня 2009

Я использую LINQ to SQL для поиска в довольно большой базе данных и не уверен в том, какой подход лучше использовать для подкачки с помощью DataPager. Мне известны методы Skip () и Take (), и они работают правильно. Однако я не могу использовать счетчик результатов для пейджера данных, поскольку они всегда будут иметь размер страницы, определенный в методе Take ().

Например:

var result = (from c in db.Customers
              where c.FirstName == "JimBob"
              select c).Skip(0).Take(10);

Этот запрос всегда будет возвращать 10 или менее результатов, даже если есть 1000 JimBobs. В результате DataPager всегда думает, что есть одна страница, и пользователи не могут перемещаться по всему набору результатов. Я видел одну онлайн-статью, в которой автор просто написал другой запрос, чтобы получить общее количество, и назвал его.

Что-то вроде:

int resultCount = (from c in db.Customers
                   where c.FirstName == "JimBob"
                   select c).Count();

и использовал это значение для DataPager. Но я бы предпочел не копировать и вставлять каждый запрос в отдельный вызов, где я хочу публиковать результаты по понятным причинам. Есть ли более простой способ сделать это, который может быть повторно использован для нескольких запросов?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 09 сентября 2009

Помните, что linq обеспечивает выполнение отложенного запроса ...

var qry =     from c in db.Customers              
              where c.FirstName == "JimBob"
              select c;

int resultCount = qry.Count();

var results = qry.Skip(0).Take(10);
0 голосов
/ 12 июня 2009

В подобных ситуациях я иногда возвращаю общее количество записей в качестве поля в моем наборе результатов из базы данных.

По сути, у вас есть только два варианта, написать другой запрос специально для подсчета или вернуть его в виде столбца в результатах.

...