使用LINQ to SQL进行分页搜索结果

使用LINQ to SQL获取分页结果的最佳模式是什么?

我有以下情况:

假设我想按描述搜索项目表。 我可以轻松地做到:

public IQueryable FindItemsByDescription(string description) { return from item in _dc.Items where item.Description.Contains(description); } 

现在,对这个结果集进行分页的最佳方法是什么?

  1. 我应该在执行此操作之前执行计数查询以查找结果集大小,然后根据我的需要限制此查询吗? 我觉得这是要走的路。
  2. 我应该执行完整查询,从数组大小中获取计数并仅返回此数组中的分页子集吗? 如果结果集足够大,我觉得这会浪费很多时间……或者LINQ to SQL在这里做了些什么?

是否有LINQ to SQL常用模式来执行此操作?

编辑:我必须澄清一件小事。 我知道Take和Skip方法。 但是,在使用TakeSkip之前,我应该如何获得查询将检索的结果总数

分页模式非常简单。 它涉及使用Skip()和Take()扩展方法,如下所示:

 public IQueryable FindItemsByDescription(string description, int pageIndex, int pageSize) { return from item in _dc.Items where item.Description. Contains(description). Skip((pageIndex - 1) * pageSize). Take(pageSize); } 

更新:要获得总计数,只需使用Count()方法:

 int totalCount = from item in _dc.Items where item.Description. Contains(description).Count(); int numberOfPages = (int)(totalCount/pageSize); 

根据您显示记录的方式,您可以使用numberOfPages显示带有“Page X of Y”的导航栏…第1页,共10页等。

您可以使用Take扩展方法:

 public IQueryable FindItemsByDescription(string description, int resultAmount) { return from item in _dc.Items where item.Description.Contains(description).Take(resultAmount); } 

您可以更进一步,并使用Skip进行后续“页面”:

 public IQueryable FindItemsByDescription(string description, int resultAmount, int page) { return from item in _dc.Items where item.Description.Contains(description).Skip(resultAmount * page).Take(resultAmount); }