No SQL Server 2008 e posterior, adicione
COUNT(*)
OVER ()
como um dos nomes de coluna em sua consulta e que será preenchido com o total de linhas retornadas. Ele é repetido em cada linha, mas pelo menos o valor está disponível.
A razão pela qual muitas outras soluções não funcionam é que, para conjuntos de resultados muito grandes, você não saberá o total até depois de iterar todas as linhas, o que não é prático em muitos casos (especialmente soluções de processamento sequencial). Essa técnica fornece a contagem total após chamar o primeiro
IDataReader.Read()
, por exemplo. select COUNT(*) OVER () as Total_Rows, ... from ...