0

我在数据库中有很多记录,并且我有一个控件来分页这些记录。如何为每个页面选择记录?例如,我需要从第 51 条记录到第 100 条记录中选择记录。而且我不能使用 LINQ 表达式。我正在使用数据对象 3.9 。所以我开始

Query q = new Query("select SomeClass objects");
4

1 回答 1

1

使用此查询:

Query q = new Query("select top 100 SomeClass objects");

据我记得,.Skip在 DO39 的情况下无法指定类似条件,因此您应该手动执行此操作(例如,通过应用.Skip到您拥有的可枚举项)。

在这种情况下,会产生明显的性能影响,但就计算复杂性而言,这并不是必需的。这样做的唯一效果是 SQL Server 将向客户端发送更多行,但它必须执行的所有其他工作保持不变。

一个例子说明了这一点:

如果您要求 Google 向您显示第 1000 页结果,它无论如何都会找到与您的查询相关的所有文档,计算每个文档的匹配排名,对其进行排序以获得至少前 1000 个具有最佳匹配排名的页面,并且仅在完成所有这些工作之后,它将能够为您提供第 1000 页。

因此,如果有 1,000,000,000,000 个文档,与完成的所有其他工作相比,向客户端发送 10K 行的计算复杂度很小。

另请注意,分页的整个想法是显示整个数据集的一小部分。因此,如果您的用户需要分页到例如第 1000 页,则说明设计有问题。只有两种情况:

  • 用户必须获得一小部分数据(即执行一些搜索)
  • 用户必须获取所有数据(例如进行备份)

没有中间情况。

于 2011-08-15T18:55:06.080 回答