在不使用Skip()或Take()的情况下缓存分页LINQ结果

时间:2010-08-25 01:05:32

标签: sql-server linq paging sqlcachedependency

我在我的网站上使用LINQ来分页数据。我目前正在使用Skip()和Take()来执行分页。现在我想使用缓存依赖项来缓存数据,以便在数据更改时缓存将失效。但是,SQL Server的query notifications不支持TOP表达式。是否有任何其他方法可以使用不生成TOP的LINQ查询分页数据集?或者另一种缓存此数据的方法,使其无效?

2 个答案:

答案 0 :(得分:1)

缓存整个结果集,并将SqlDependancy设置为该值。

从缓存中读取整个集合,然后使用Skip / Take on。

答案 1 :(得分:1)

通过两次传递数据:

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