Кэширование результатов PAGED LINQ без использования Skip () или Rek ()
-
01-10-2019 - |
Вопрос
Я использую 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 для этого.
Прочитайте весь набор из кэша, а затем используйте пропустить / принимать это.
Не связан с StackOverflow