Кэширование результатов PAGED LINQ без использования Skip () или Rek ()

StackOverflow https://stackoverflow.com/questions/3562166

Вопрос

Я использую Linq для пейджинговых данных на моем сайте. В настоящее время я использую SKIP () и взять (), чтобы выполнить пейджинг. Теперь я хочу кэшировать данные, используя зависимости кэша, чтобы кэш был недействителен, если данные изменяется. Однако SQL Server's's Запрос уведомления Не поддерживайте верхнее выражение. Существуют ли какие-либо альтернативные способы запроса набора данных по карману с LINQ, который не генерирует верх? Или другой способ кэшировать эти данные, чтобы он недействителен?

Это было полезно?

Решение

Потяните ваши данные в два прохода:

// step1: get the IDs of the items in the current page.
List<int> customerIds = db.Customers
  .Where(filter)
  .OrderBy(c => c.FirstName)
  .ThenBy(c => c.CustomerID)
  .Select(c => c.CustomerID)
  .Skip(200)
  .Take(20)
  .ToList();

// step2: get the items for that page
List<Customer> customers = db.Customers
  .Where(c => customerIds.Contains(c.CustomerID))
  .ToList();

Другие советы

Кэшируйте весь набор результатов и установите SqldeCendance для этого.

Прочитайте весь набор из кэша, а затем используйте пропустить / принимать это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top