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

时间:2014-03-10 16:00:14

标签: c# linq entity-framework

我有一个包含两个不同DbSet的实体框架DbContext。

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

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

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

有没有办法操纵Entity Framework来做到这一点?

2 个答案:

答案 0 :(得分:1)

有可能。

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

这将是明智的废话,但鉴于您的数据库模型已损坏,无法解决这个问题。它基本上必须获得SQL的所有行的临时视图以找到第一行 - 这将是缓慢的。

答案 1 :(得分:1)

最好的办法是将它们与存储过程或视图结合起来,然后将sp / view映射到Entity Framework。在客户端上梳理它们会破坏性能 - 让服务器为你做这件事;这显然是服务器方面的任务。