Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 判断结果是否多于请求的最佳方法(分页)?_C#_Sql_Pagination - Fatal编程技术网

C# 判断结果是否多于请求的最佳方法(分页)?

C# 判断结果是否多于请求的最佳方法(分页)?,c#,sql,pagination,C#,Sql,Pagination,例如,我正在运行一个检索20行的查询。我想知道是否有21个,以便我可以相应地启用“下一页”按钮。目前,我正在检索pageSize+1,并返回一个布尔值作为输出参数,该参数的赋值基于是否检索到21行(在本例中为21行),但实际上只返回20行作为列表。这意味着我正在检索一个额外的查询,但我忽略了对性能不理想的查询,我不想运行计数,因为这是另一个查询 注意:使用pageddatasource实际上不是一个选项,必须坚持使用rowlimit和start行 谢谢您的建议。2查询: 结果页 然后是结果总数

例如,我正在运行一个检索20行的查询。我想知道是否有21个,以便我可以相应地启用“下一页”按钮。目前,我正在检索pageSize+1,并返回一个布尔值作为输出参数,该参数的赋值基于是否检索到21行(在本例中为21行),但实际上只返回20行作为列表。这意味着我正在检索一个额外的查询,但我忽略了对性能不理想的查询,我不想运行计数,因为这是另一个查询

注意:使用pageddatasource实际上不是一个选项,必须坚持使用rowlimit和start行

谢谢您的建议。

2查询:

结果页 然后是结果总数 第一个查询将包含页面和页面大小,第二个查询将提供总行数。通过这些信息,您可以计算总页数并将其呈现给用户。

2查询:

结果页 然后是结果总数
第一个查询将包含页面和页面大小,第二个查询将提供总行数。有了这些信息,您可以计算总页数并将其呈现给用户。

我怀疑在同一个DB访问中检索一个额外的第21行和第20行在性能上是可以忽略不计的

我怀疑在同一个DB访问中检索一个额外的第21行和第20行在性能上是可以忽略不计的

您可以使用嵌套查询,如下所示:

 select    TOP 20 *,
           (select count(*) from tableName) as TotalCount
 from      tableName
然后每一行都有total列,因此您可以检查它

或者,可以使用此语法,避免嵌套的select。如果您有其他谓词,而这些谓词不必在嵌套的select中重复,这将更加方便:

 select    TOP 20 *, count(*) over() as TotalCount
 from      tableName

您可以使用嵌套查询,如下所示:

 select    TOP 20 *,
           (select count(*) from tableName) as TotalCount
 from      tableName
然后每一行都有total列,因此您可以检查它

或者,可以使用此语法,避免嵌套的select。如果您有其他谓词,而这些谓词不必在嵌套的select中重复,这将更加方便:

 select    TOP 20 *, count(*) over() as TotalCount
 from      tableName
试试这个

Select *,Row_Number .... as RowNo
into #Table
from Table

Select * 
from #Table
WHERE RowNo > @FirstRec AND RowNo < @LastRec

Select count(*)
from #Table
试试这个

Select *,Row_Number .... as RowNo
into #Table
from Table

Select * 
from #Table
WHERE RowNo > @FirstRec AND RowNo < @LastRec

Select count(*)
from #Table
一次算一次。使用它来显示页数。 每次用户单击页码,都会得到20条记录 一次算一次。使用它来显示页数。 每次用户单击页码,都会得到20条记录
这是一个使用行号的

–-Change these two variable to parameters of your
–-actual stored procedure

Declare @PageNumber int
Declare @PageSize int


–-Assume we need page 6 i.e. records from 51-60
Select @PageNumber=6
Select @PageSize=10


–-Select only those records which
–-fit into a single page
Select Top(@PageSize) * from
(
Select
RowID=ROW_NUMBER() OVER (ORDER BY Name),
ProductID,Name,ProductNumber,ListPrice,
TotalRows=Count(*) OVER() --Count all records
from Production.Product
) A
Where A.RowId > ((@PageNumber-1)*@PageSize)

这是一个使用行号的

–-Change these two variable to parameters of your
–-actual stored procedure

Declare @PageNumber int
Declare @PageSize int


–-Assume we need page 6 i.e. records from 51-60
Select @PageNumber=6
Select @PageSize=10


–-Select only those records which
–-fit into a single page
Select Top(@PageSize) * from
(
Select
RowID=ROW_NUMBER() OVER (ORDER BY Name),
ProductID,Name,ProductNumber,ListPrice,
TotalRows=Count(*) OVER() --Count all records
from Production.Product
) A
Where A.RowId > ((@PageNumber-1)*@PageSize)

谢谢你,伙计,谢谢你的回复-但是就像我说的,我想避免使用另一个查询来计算结果。这是唯一的办法吗+1.这是常见的方法。另外一个标量查询将不会是问题。除了2个查询!=2个sqlcommands。您可以在sql命令中定义两个查询,并在结果集中移动。或者,如果您使用的是像NH这样的ORM,您可以使用futures通过一个远程调用发出多个查询。谢谢,伙计,感谢您的回复-但就像我说的,我希望避免使用另一个查询来计算结果。这是唯一的办法吗+1.这是常见的方法。另外一个标量查询将不会是问题。除了2个查询!=2个sqlcommands。您可以在sql命令中定义两个查询,并在结果集中移动。或者,如果您使用的是像NH这样的ORM,那么您可以使用futures通过一个远程调用发出多个查询。该查询很复杂,看起来可以忽略不计——寻找更好的替代方案没有坏处。谢谢。这个问题很复杂,看起来可以忽略不计——寻找更好的替代方案没有坏处。谢谢,太好了!正是我想要的。非常感谢,伙计,我不知道为什么我没想到。太好了!正是我想要的。非常感谢,伙计,我不知道为什么我没有想到。我应该提到这不是一个存储过程抱歉,只有一个SQL命令。在这种情况下,您只执行一个查询。我应该提到这不是一个存储过程抱歉,只有一个SQL命令。在这种情况下,您只执行一个查询。这也很有意义。谢谢。我认为对我来说,保持页面尽可能的更新是很重要的,因为我搜索的页面数量是动态的+1.不管怎样,你似乎更接近pageSize+1这也很有道理。谢谢。我认为对我来说,保持页面尽可能的更新是很重要的,因为我搜索的页面数量是动态的+1。那么你似乎有更好的方法pageSize+1