Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit ebf73b5

Browse files
committed
Remove ORDER BY in RowCount expressions
1 parent bf9341f commit ebf73b5

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

src/ServiceStack.OrmLite/Expressions/ReadExpressionCommandExtensions.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,9 @@ internal static long GetCount(this IDbCommand dbCmd, string sql)
118118

119119
internal static long RowCount<T>(this IDbCommand dbCmd, SqlExpression<T> expression)
120120
{
121-
return dbCmd.Scalar<long>(dbCmd.GetDialectProvider().ToRowCountStatement(expression.ToSelectStatement()));
121+
//ORDER BY throws when used in subselects in SQL Server. Removing OrderBy() clause since it doesn't impact results
122+
var countExpr = expression.Clone().OrderBy();
123+
return dbCmd.Scalar<long>(dbCmd.GetDialectProvider().ToRowCountStatement(countExpr.ToSelectStatement()));
122124
}
123125

124126
internal static long RowCount(this IDbCommand dbCmd, string sql)

tests/ServiceStack.OrmLite.Tests/Expression/SqlExpressionTests.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,29 @@ public void Can_do_ToCountStatement_with_SqlExpression_if_expression_has_groupby
278278
}
279279
}
280280

281+
[Test]
282+
public void Can_get_RowCount_if_expression_has_OrderBy()
283+
{
284+
using (var db = OpenDbConnection())
285+
{
286+
db.DropAndCreateTable<LetterFrequency>();
287+
288+
db.Insert(new LetterFrequency { Letter = "A" });
289+
db.Insert(new LetterFrequency { Letter = "B" });
290+
db.Insert(new LetterFrequency { Letter = "B" });
291+
292+
var query = db.From<LetterFrequency>()
293+
.Select(x => x.Letter)
294+
.OrderBy(x => x.Id);
295+
296+
var rowCount = db.RowCount(query);
297+
Assert.That(rowCount, Is.EqualTo(3));
298+
299+
rowCount = db.Select(query).Count;
300+
Assert.That(rowCount, Is.EqualTo(3));
301+
}
302+
}
303+
281304
[Test]
282305
public void Can_OrderBy_Fields_with_different_sort_directions()
283306
{

0 commit comments

Comments
 (0)