这里我有一个任意的IEnumerable<T>
。我想使用通用辅助函数对其进行分页,而不是每次都编写Skip
/ Take
对。这是我的功能:
IEnumerable<T> GetPagedResults<T>(IEnumerable<T> query, int pageIndex, int pageSize)
{
return query.Skip((pageIndex - 1) * pageSize).Take(pageSize);
}
我的代码是:
result = GetPagedResults(query, 1, 10).ToList();
这会产生一个没有TOP 10
关键字的SELECT语句。但是下面的代码用它生成了SELECT:
result = query.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
我在功能上做错了什么?
答案 0 :(得分:3)
我认为您需要将其更改为使用IQueryable,以便维持延迟执行。当您使用IEnumerable时,它将在执行基本查询后在内存中应用额外的函数(Skip,Take等)。但是,使用IQueryable将导致其他方法包含在发送到数据库的查询中。
答案 1 :(得分:2)
尝试使用IQueryable ......
IQueryable<T> GetPagedResults<T>(IQueryable<T> query,
int pageIndex,
int pageSize)
{
return query.Skip((pageIndex - 1) * pageSize).Take(pageSize);
}