c# - C# - SQL - 将 rowsCount 动态添加到数据模型
问题描述
我有一个代码,我通过像这样转换表模型来进行 sql 查询:
string sql = string.Format("SELECT * FROM {0}...", tableName...);
接着:
IEnumerable<T> r = dbConn.Connection.Query<T>(sql...);
问题是如果我想获得总行数(当然我可以计算“r”但如果有一个 where 子句它是不可能的,因为我想要总计数)我必须在没有 where 的情况下进行另一个查询。所以我想删除第二个查询。我在 sql 查询中执行此操作以获取 rowsCount:
string sql = string.Format("SELECT *, count(*) over() rowsCount FROM {0}...", tableName...);
我可以使用此查询获取 rowsCount,但由于两个模型都没有 rowsCount 我无法访问它,对我应该如何做有什么建议吗?
编辑:第一个查询通过使用偏移量和限制进行分页过滤,所以我想要总计数而不是过滤查询的计数。我正在寻找是否有一种方法可以不使用两个单独的查询,并通过一个查询获得结果和 rowsCount。
解决方案
您将不得不执行 2 个 SQL 查询。
没有什么能阻止您在一个 SQL 块中运行它们或使用输出参数调用存储的过程。因此,您不必拨打 2 次电话,但至少需要 2 次查询。
https://www.sqlservertutorial.net/sql-server-stored-procedures/stored-procedure-output-parameters/
如果您担心总计数的性能,请确保您在该表中的最小列上有一个索引,并且它应该非常快。
下面的示例在一次调用中返回一个数据集和一个输出
DROP PROCEDURE IF EXISTS dbo.DataSetAndOutput
GO
CREATE PROCEDURE dbo.DataSetAndOutput
@YourId BIGINT,
@CountRecords INT OUTPUT
AS
BEGIN
SELECT * FROM YourTable
WHERE Id = @YourId
SET @CountRecords = (SELECT COUNT(YourId) FROM YourTable)
END
GO
-- Test the output
DECLARE @ResultCount INT
EXEC dbo.DataSetAndOutput @YourId= 252452, @CountRecords = @ResultCount OUTPUT
SELECT @ResultCount AS TheCount
推荐阅读
- python - 如何从这些彩色图像中提取文本?
- c# - CORS 问题随机发生
- reactjs - 我无法设置哪些元素将显示在 js 分页反应的页面上
- reactjs - 访问现有的 html
- java - 带有 Jersey 的 Spring Boot - 过滤请求正文属性
- math - 找到一个公式来知道一棵树有多少“孩子”,如果它是一棵树子树
- kiwi-tcms - 如何更改测试用例上的 kiwi 模板文本?
- ruby-on-rails - 如何在rails before_create钩子中编写if else条件,以便仅在条件为真时保存对象?
- python - 我的 PyQt 应用程序无法正常工作并出现错误 - 此应用程序无法启动,因为没有 Qt 平台
- ember.js - Ember JS:延迟加载模型数据