我如何使用 linq 翻页到我的列表

问题描述 投票:0回答:3

我有一个 linq 查询来从数据库获取数据。 像这样的东西:

Repository.Query<Project>.Where(r=>r.IsActive).OrderBy(r=>r.Date);

然后我将其返回到视图模型。 我现在想要添加分页,所以我在控制器操作中获得一个附加参数,即页面,所以我想要在查询中添加一些内容以返回让我们说 10 个结果 * 页码:

所以如果是第 1 页,我想获得前 10 个结果。我知道我可以使用

.Take(10)

要执行此操作,但我不确定当传入的页面是 2 或 3 或除 1 之外的任何内容时如何执行此操作。

最好的方法(也是最有效的)是什么??

asp.net-mvc linq pagination
3个回答
8
投票

结合使用

Skip
Take

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

0
投票

创建一个扩展方法。很有可能,您的整个网络应用程序都需要这个。

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

© www.soinside.com 2019 - 2024. All rights reserved.