c# - 将 Entity Framework .Take() 操作转移到查询结束

标签 c# .net entity-framework

当前,当从上下文中获取集合时,我们在 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/

相关文章:

c# - WCF 服务 - 支持范围为 : bytes support? 的流式文件

c# - 将 Entity Framework 模型映射到多个表

c# - 在 Npgsql 中获取数据库列表

c# - 使用 c# 和 mysql 更新表

c# - 生成随机的唯一值 C#

c# - 无法在对象中插入重复的键 - 如何在 Entity Framework Core 中创建复合键

c# - 如何在 Entity Framework 6 代码优先方法中映射选择存储过程?

c# - 计算最大值

c# - .NET Core HttpRequest header 优先级是什么?

c# - 使用 Effort.EF6 测试预加载场景