我有一个linq查询来从数据库中获取数据。类似的东西:
Repository.Query<Project>.Where(r=>r.IsActive).OrderBy(r=>r.Date);
然后我将其返回到viewmodel。我现在想要添加分页,所以我在我的控制器操作中得到一个额外的参数,这是页面,所以我想要添加到我的查询中的东西返回让我们说10个结果*页码:
所以,如果它的第1页,我想获得前10个结果。
我知道我可以使用.Take(10)
这样做但我不确定当传入的页面是2或3或除1以外的任何内容时如何执行此操作。
这样做的最佳方式(也是最有效的)是什么?
答案 0 :(得分:8)
答案 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);