如何使用LINQ对列表进行分页

3
我有一个 Linq 查询,用于从数据库中获取数据。大致如下:
Repository.Query<Project>.Where(r=>r.IsActive).OrderBy(r=>r.Date);

我会翻译英文到中文:

然后将此返回到视图模型。现在我想添加分页,因此我在控制器操作中获取了一个额外的参数,即页面,因此我希望在我的查询中添加一些内容,以返回例如10个结果 * 页码:

因此,如果是第1页,我希望获得前10个结果。我知道可以使用

.Take(10)

我想要做这件事,但是不确定当传入的页面是2、3或者除了1以外的其他数字时该怎么做。

最好的方式(并且最有效率)是什么?

3个回答

8

使用SkipTake的组合:

.Skip((page - 1) * resultsPerPage).Take(resultsPerPage);

0
创建一个扩展方法。很有可能,在您的 Web 应用程序中需要使用它。
public static IEnumerable<T> TakePage<T>(this IEnumerable<T> items, int page, int pageSize = 10) where T : class
{
    return items.Skip(pageSize * (page - 1)).Take(pageSize);
}

使用方法:

int page = 2;
int pageSize = 25;
Repository.Query<Project>.Where(r=>r.IsActive).TakePage(page, pageSize);

0
我使用以下代码:.Skip((page ?? 0) * resultsPerPage).Take(resultsPerPage);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接