如何使用linq进入我的列表页面

时间:2011-01-30 23:47:36

标签: asp.net-mvc linq paging

我有一个linq查询来从数据库中获取数据。类似的东西:

Repository.Query<Project>.Where(r=>r.IsActive).OrderBy(r=>r.Date);
然后我将其返回到viewmodel。我现在想要添加分页,所以我在我的控制器操作中得到一个额外的参数,这是页面,所以我想要添加到我的查询中的东西返回让我们说10个结果*页码:

所以,如果它的第1页,我想获得前10个结果。

我知道我可以使用

.Take(10)

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

这样做的最佳方式(也是最有效的)是什么?

3 个答案:

答案 0 :(得分:8)

使用SkipTake的组合:

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

答案 1 :(得分: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);

答案 2 :(得分:0)

我用这个:.Skip((page ?? 0) * resultsPerPage).Take(resultsPerPage);