当前,当从上下文中获取集合时,我们在 DataRepository 中执行分页操作。这意味着我们从上下文中获得的查询已经应用了 .Skip() 和 .Take() 调用。然后 Controller 执行他们的业务逻辑或过滤操作,而不必担心分页。
问题是,当您在 .Take() 语句之后执行 .Where() 语句时,您只是在页面上过滤,而不是在操作之前过滤整个表。有没有一种方法可以调用 .Skip() 和 .Take() (或我可以使用的另一种方法)来指定它们这些操作应该在查询被评估时最后发生,即使尚未进行 .Where 调用然而,还是我必须重构它以在所有其他操作之后调用 .Skip() 和 .Take()?
最佳答案
调用Where和Take方法的顺序不同代表数据集不同。您可能需要一种新方法来接受过滤器并在 Skip and Take 之前调用 Where
public static IQueryable<T> PaginationAfterWhere<T>(this IQueryable<T> queryable, Func<T, bool> where, int skip, int take)
{
return queryable.Where(x => where(x)).Skip(skip).Take(take);
}
关于c# - 将 Entity Framework .Take() 操作转移到查询结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51527442/