当前,从上下文获取集合时,我们在DataRepository中进行分页操作。这意味着我们从上下文中获取的查询已经应用了.Skip()和.Take()调用。然后,控制器可以执行其业务逻辑或筛选操作,而不必担心分页。

问题是,当您在.Take()语句之后执行.Where()语句时,您仅在页面上进行过滤,而不在操作之前对整个表进行过滤。有没有办法我可以调用.Skip()和.Take()(或我可以使用的另一种方法)来指定它们,这些操作应在对Query求值时最后执行,即使尚未进行.Where调用但是,还是我必须将其重构才能在所有其他操作之后调用.Skip()和.Take()?

最佳答案

调用Where和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/

10-11 17:07