Pregunta

Estoy usando LINQ para la búsqueda de datos en mi página web. Actualmente estoy usando Skip () y Take () para realizar la paginación. Ahora quiero almacenar en caché los datos utilizando las dependencias de caché para que el caché se invalida si los datos cambian. Sin embargo SQL Server es consulta notificaciones no son compatibles con la expresión TOP. ¿Hay maneras alternativas para consultar un conjunto paginado de datos con LINQ que no generan TOP? Otra forma de almacenar en caché estos datos para que invalida?

¿Fue útil?

Solución

Tire de sus datos en dos pasos:

// 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();

Otros consejos

Cache todo el conjunto de resultados, y establecer el SqlDependancy a eso.

Leer todo el conjunto de la caché, y luego usar Salto / Tomar en eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top