使用LINQ to SQL获取分页结果的最佳模式是什么?
我的场景如下:
假设我想通过description搜索items表。我可以轻松地执行以下操作:
public IQueryable<Item> FindItemsByDescription(string description)
{
return from item in _dc.Items
where item.Description.Contains(description);
}
现在,对于这个结果集,最好的分页方法是什么?
- 我应该在执行此操作之前执行一个 count 查询以找到结果集大小,然后根据需要限制此查询吗?我感觉这是正确的方式。
- 我应该执行完整的查询,从数组大小中获取计数,然后仅返回这个数组的分页子集吗?如果结果集足够大,我感觉这将是一种巨大的浪费时间...或者是LINQ to SQL在这里做了一些魔法?
LINQ to SQL是否有用于执行此操作的通用模式?
编辑:我必须澄清一件小事情。我知道 Take 和 Skip 方法。但是,在使用Take和Skip之前,我应该如何获得查询将检索的总计数?
int numberOfPages = (int) Math.Ceiling((double) totalCount/pageSize);
该方法可以将总数除以每页的大小,然后向上取整得到页数。 - Alex Fairchildvar Queryobj = (from item in _dc.Items where item.Description.Contains(description)); int totalCount = Queryobj.Count(); ... return QueryObj.Skip((pageIndex - 1) * pageSize).Take(pageSize);
这样会在数据库中运行两次where子句,只返回第一部分的计数,然后返回分页值吗? - Dan