使用 LINQ to SQL 获取分页结果的最佳模式是什么?
我有以下情况:
假设我想通过 description 搜索 items 表。我很容易做到:
public IQueryable<Item> FindItemsByDescription(string description)
{
return from item in _dc.Items
where item.Description.Contains(description);
}
现在,对这个结果集进行分页的最佳方法是什么?
是否有用于执行此操作的 LINQ to SQL 常用模式?
编辑:我必须澄清一件小事。我知道Take和Skip方法。但是,在使用 Take 和 Skip 之前,我应该如何获得查询将检索的结果的总计数?
答案 0 :(得分:30)
分页模式非常简单。它涉及使用Skip()和Take()扩展方法,如下所示:
public IQueryable<Item> FindItemsByDescription(string description, int pageIndex, int pageSize)
{
return from item in _dc.Items
where item.Description.
Contains(description).
Skip((pageIndex - 1) * pageSize).
Take(pageSize);
}
UPDATE:要获得总计数,只需使用Count()方法:
int totalCount = from item in _dc.Items
where item.Description.
Contains(description).Count();
int numberOfPages = (int)(totalCount/pageSize);
根据您显示记录的方式,您可以使用numberOfPages显示“Y页面X”的导航栏...第1页,共10页等。
答案 1 :(得分:2)
您可以使用Take extension方法:
public IQueryable<Item> FindItemsByDescription(string description, int resultAmount)
{
return from item in _dc.Items
where item.Description.Contains(description).Take(resultAmount);
}
您可以更进一步,并使用Skip进行后续“页面”:
public IQueryable<Item> FindItemsByDescription(string description, int resultAmount, int page)
{
return from item in _dc.Items
where item.Description.Contains(description).Skip(resultAmount * page).Take(resultAmount);
}