我有一个 linq 查询来从数据库获取数据。 像这样的东西:
Repository.Query<Project>.Where(r=>r.IsActive).OrderBy(r=>r.Date);
然后我将其返回到视图模型。 我现在想要添加分页,所以我在控制器操作中获得一个附加参数,即页面,所以我想要在查询中添加一些内容以返回让我们说 10 个结果 * 页码:
所以如果是第 1 页,我想获得前 10 个结果。我知道我可以使用
.Take(10)
要执行此操作,但我不确定当传入的页面是 2 或 3 或除 1 之外的任何内容时如何执行此操作。
最好的方法(也是最有效的)是什么??
创建一个扩展方法。很有可能,您的整个网络应用程序都需要这个。
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);
我用这个:
.Skip((page ?? 0) * resultsPerPage).Take(resultsPerPage);