Skip to content

Commit 440a55a

Browse files
committed
Updated OrderBy and ThenBy to accept a direction param.
So now you can do things like: _db.Customers.FindAll(_db.Customers.CustomerName == "Arthur") .OrderBy(_db.Customers.CustomerName, OrderByDirection.Descending) .ThenBy(_db.Customers.CustomerId); Useful when your sort order is passed in as a parameter, such as when binding the data to a DataTables table :-)
1 parent 6bdb3d1 commit 440a55a

4 files changed

Lines changed: 43 additions & 10 deletions

File tree

Simple.Data.BehaviourTest/NaturalNamingTest.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,22 @@ public void DotNetNamingIsCorrectlyResolvedInOrderByExpression()
4545
Parameter(0).Is("Arthur");
4646
}
4747

48+
[Test]
49+
public void SortOrderIsCorrectlyResolvedInOrderByExpression()
50+
{
51+
_db.Customers.FindAll(_db.Customers.CustomerName == "Arthur").OrderBy(_db.Customers.CustomerName, OrderByDirection.Descending).ToList<dynamic>();
52+
GeneratedSqlIs("select [dbo].[customers].[customerid],[dbo].[customers].[customer_name] from [dbo].[customers] where [dbo].[customers].[customer_name] = @p1 order by [customer_name] desc");
53+
Parameter(0).Is("Arthur");
54+
}
55+
56+
[Test]
57+
public void SortOrderIsCorrectlyResolvedInOrderByThenByExpression()
58+
{
59+
_db.Customers.FindAll(_db.Customers.CustomerName == "Arthur").OrderBy(_db.Customers.CustomerName, OrderByDirection.Descending).ThenBy(_db.Customers.CustomerId, OrderByDirection.Ascending).ToList<dynamic>();
60+
GeneratedSqlIs("select [dbo].[customers].[customerid],[dbo].[customers].[customer_name] from [dbo].[customers] where [dbo].[customers].[customer_name] = @p1 order by [customer_name] desc, [customerid]");
61+
Parameter(0).Is("Arthur");
62+
}
63+
4864
[Test]
4965
public void DotNetNamingInComplexQuery()
5066
{

Simple.Data.UnitTest/SimpleQueryTest.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,15 @@ public void OrderByShouldSetOrderAscending()
4545
Assert.AreEqual(OrderByDirection.Ascending, query.Clauses.OfType<OrderByClause>().Single().Direction);
4646
}
4747

48+
[Test]
49+
public void OrderByWithDescendingDirectionShouldSetOrderDescending()
50+
{
51+
var query = new SimpleQuery(null, "foo");
52+
query = query.OrderBy(new ObjectReference("bar"), OrderByDirection.Descending);
53+
Assert.AreEqual("bar", query.Clauses.OfType<OrderByClause>().Single().Reference.GetName());
54+
Assert.AreEqual(OrderByDirection.Descending, query.Clauses.OfType<OrderByClause>().Single().Direction);
55+
}
56+
4857
[Test]
4958
public void OrderByBarShouldSetOrderAscending()
5059
{
@@ -64,6 +73,18 @@ public void OrderByBarThenByQuuxShouldSetOrderAscending()
6473
Assert.AreEqual(OrderByDirection.Ascending, actual.Clauses.OfType<OrderByClause>().First().Direction);
6574
Assert.AreEqual(OrderByDirection.Ascending, actual.Clauses.OfType<OrderByClause>().Skip(1).First().Direction);
6675
}
76+
77+
[Test]
78+
public void OrderByBarThenQuxxShouldBeAbleToMixOrdering()
79+
{
80+
var query = new SimpleQuery(null, "foo");
81+
query = query.OrderBy(new ObjectReference("bar"), OrderByDirection.Ascending)
82+
.ThenBy(new ObjectReference("quux"), OrderByDirection.Descending);
83+
Assert.AreEqual("bar", query.Clauses.OfType<OrderByClause>().First().Reference.GetName());
84+
Assert.AreEqual("quux", query.Clauses.OfType<OrderByClause>().Skip(1).First().Reference.GetName());
85+
Assert.AreEqual(OrderByDirection.Ascending, query.Clauses.OfType<OrderByClause>().First().Direction);
86+
Assert.AreEqual(OrderByDirection.Descending, query.Clauses.OfType<OrderByClause>().Skip(1).First().Direction);
87+
}
6788

6889
[Test]
6990
public void ThenByShouldModifyOrderAscending()

Simple.Data/OrderByClause.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,10 @@ public class OrderByClause : SimpleQueryClauseBase
99
private readonly ObjectReference _reference;
1010
private readonly OrderByDirection _direction;
1111

12-
public OrderByClause(ObjectReference reference) : this(reference, OrderByDirection.Ascending)
13-
{
14-
}
15-
16-
public OrderByClause(ObjectReference reference, OrderByDirection direction)
12+
public OrderByClause(ObjectReference reference, OrderByDirection? direction = null)
1713
{
1814
_reference = reference;
19-
_direction = direction;
15+
_direction = direction.HasValue ? direction.Value : OrderByDirection.Ascending;
2016
}
2117

2218
public OrderByDirection Direction

Simple.Data/SimpleQuery.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,21 +153,21 @@ public SimpleQuery Where(SimpleExpression criteria)
153153
return new SimpleQuery(this, _clauses.Append(new WhereClause(criteria)));
154154
}
155155

156-
public SimpleQuery OrderBy(ObjectReference reference)
156+
public SimpleQuery OrderBy(ObjectReference reference, OrderByDirection? direction = null)
157157
{
158-
return new SimpleQuery(this, _clauses.Append(new OrderByClause(reference)));
158+
return new SimpleQuery(this, _clauses.Append(new OrderByClause(reference, direction)));
159159
}
160160

161161
public SimpleQuery OrderByDescending(ObjectReference reference)
162162
{
163163
return new SimpleQuery(this, _clauses.Append(new OrderByClause(reference, OrderByDirection.Descending)));
164164
}
165165

166-
public SimpleQuery ThenBy(ObjectReference reference)
166+
public SimpleQuery ThenBy(ObjectReference reference, OrderByDirection? direction = null)
167167
{
168168
ThrowIfNoOrderByClause("ThenBy requires an existing OrderBy");
169169

170-
return new SimpleQuery(this, _clauses.Append(new OrderByClause(reference)));
170+
return new SimpleQuery(this, _clauses.Append(new OrderByClause(reference, direction)));
171171
}
172172

173173
private void ThrowIfNoOrderByClause(string message)

0 commit comments

Comments
 (0)