在多个dbset上使用分页(Skip, Take)

本文关键字:Skip Take 分页 dbset | 更新日期: 2023-09-27 17:49:24

我有一个实体框架DbContext与两个不同的dbset。

在我看来,我将这两个集合合并到同一个视图模型中,并将它们列在同一个表中。

我想支持表分页,以便能够一次只查询按特定列排序的一页记录。如果不从数据库中读取所有记录,然后从内存中分页,我看不出如何做到这一点。

例如,我希望能够按日期升序排序,因为两个表都有一个日期列。我可以简单地从两个表中获取页面大小,然后在内存中排序,但当我跳过记录时,问题开始发挥作用。我不知道在每个表中跳过多少条,因为这取决于在另一个表中找到了多少条记录。

是否有一种方法来操纵实体框架做到这一点?

在多个dbset上使用分页(Skip, Take)

这是可能的。

  • 将它们加入数据库(可以在EF中完成)。
  • 项目(选择new{})到最终对象
  • 排序,跳过,接受投影

这将是垃圾性能明智,但没有办法,因为你有一个破碎的数据库模型。它基本上必须获得所有行的临时视图,以便SQL找到第一个行-这将很慢。

最好的办法是将它们与存储过程或视图组合在一起,然后将该sp/视图映射到实体框架中。在客户端对它们进行梳理会降低性能——让服务器为你做吧;