Каков наилучший шаблон для получения постраничных результатов с помощью LINQ to SQL?Paginated результаты поиска с LINQ to SQL
У меня есть следующий сценарий:
Предположим, я хочу найти пунктов таблицу описанием. Я могу легко:
public IQueryable<Item> FindItemsByDescription(string description)
{
return from item in _dc.Items
where item.Description.Contains(description);
}
Теперь, что было бы лучшим способом для разбивки на страницы этого набора результатов?
- Должен ли я выполнить счета запрос на прежде чем сделать это, чтобы узнать результат заданного размера, а затем ограничить этот запрос в соответствии с тем, что я хочу? Я чувствую, что это путь.
- Должен ли я выполнять полный запрос, считать количество из массива и возвращать только разбитое на подмножество подмножество из этого массива? Я чувствую, что это будет огромная трата времени, если набор результатов достаточно велик ... Или LINQ to SQL здесь немного волшебства?
Есть ли LINQ to SQL общий шаблон для выполнения этой операции?
EDIT: I must уточнить одну мелочь. Я знаю методы Take and Skip. Но, прежде чем использовать Возьмите и Пропустить, как я должен получить общее количество результатов, которые запрос будет получать?
Pablo - я обновил сообщение, чтобы добавить дополнительную информацию о пейджинге. (Salu2) –
Спасибо большое Базилио. Является ли это, производительность разумным, лучший способ сделать это? Знаете ли вы, сколько запросов будет выполняться против SQL-сервера при таком подходе? –
Pablo - код в примере будет выполнять 2 отдельных SQL-запроса. Однако этого не должно быть. Вы можете взять результаты запроса и поместить его в список с помощью ToList(), а затем получить Count().Чтобы вы получили только один вызов в базе данных. –