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

Commit 87b940d

Browse files
committed
Support for multi table expressions in generic OrderBy/ThenBy/Desc APIs
1 parent 90d0266 commit 87b940d

File tree

2 files changed

+45
-17
lines changed

2 files changed

+45
-17
lines changed

src/ServiceStack.OrmLite/Expressions/SqlExpression.cs

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -803,10 +803,11 @@ public virtual SqlExpression<T> OrderBy(Expression<Func<T, object>> keySelector)
803803
return OrderByInternal(keySelector);
804804
}
805805

806-
public virtual SqlExpression<T> OrderBy<Table>(Expression<Func<Table, object>> keySelector)
807-
{
808-
return OrderByInternal(keySelector);
809-
}
806+
public virtual SqlExpression<T> OrderBy<Table>(Expression<Func<Table, object>> fields) => OrderByInternal(fields);
807+
public virtual SqlExpression<T> OrderBy<Table1, Table2>(Expression<Func<Table1, Table2, object>> fields) => OrderByInternal(fields);
808+
public virtual SqlExpression<T> OrderBy<Table1, Table2, Table3>(Expression<Func<Table1, Table2, Table3, object>> fields) => OrderByInternal(fields);
809+
public virtual SqlExpression<T> OrderBy<Table1, Table2, Table3, Table4>(Expression<Func<Table1, Table2, Table3, Table4, object>> fields) => OrderByInternal(fields);
810+
public virtual SqlExpression<T> OrderBy<Table1, Table2, Table3, Table4, Table5>(Expression<Func<Table1, Table2, Table3, Table4, Table5, object>> fields) => OrderByInternal(fields);
810811

811812
private SqlExpression<T> OrderByInternal(Expression keySelector)
812813
{
@@ -843,10 +844,11 @@ public virtual SqlExpression<T> ThenBy(Expression<Func<T, object>> keySelector)
843844
return ThenByInternal(keySelector);
844845
}
845846

846-
public virtual SqlExpression<T> ThenBy<Table>(Expression<Func<Table, object>> keySelector)
847-
{
848-
return ThenByInternal(keySelector);
849-
}
847+
public virtual SqlExpression<T> ThenBy<Table>(Expression<Func<Table, object>> fields) => ThenByInternal(fields);
848+
public virtual SqlExpression<T> ThenBy<Table1, Table2>(Expression<Func<Table1, Table2, object>> fields) => ThenByInternal(fields);
849+
public virtual SqlExpression<T> ThenBy<Table1, Table2, Table3>(Expression<Func<Table1, Table2, Table3, object>> fields) => ThenByInternal(fields);
850+
public virtual SqlExpression<T> ThenBy<Table1, Table2, Table3, Table4>(Expression<Func<Table1, Table2, Table3, Table4, object>> fields) => ThenByInternal(fields);
851+
public virtual SqlExpression<T> ThenBy<Table1, Table2, Table3, Table4, Table5>(Expression<Func<Table1, Table2, Table3, Table4, Table5, object>> fields) => ThenByInternal(fields);
850852

851853
private SqlExpression<T> ThenByInternal(Expression keySelector)
852854
{
@@ -867,10 +869,11 @@ public virtual SqlExpression<T> OrderByDescending(Expression<Func<T, object>> ke
867869
return OrderByDescendingInternal(keySelector);
868870
}
869871

870-
public virtual SqlExpression<T> OrderByDescending<Table>(Expression<Func<Table, object>> keySelector)
871-
{
872-
return OrderByDescendingInternal(keySelector);
873-
}
872+
public virtual SqlExpression<T> OrderByDescending<Table>(Expression<Func<Table, object>> keySelector) => OrderByDescendingInternal(keySelector);
873+
public virtual SqlExpression<T> OrderByDescending<Table1, Table2>(Expression<Func<Table1, Table2, object>> fields) => OrderByDescendingInternal(fields);
874+
public virtual SqlExpression<T> OrderByDescending<Table1, Table2, Table3>(Expression<Func<Table1, Table2, Table3, object>> fields) => OrderByDescendingInternal(fields);
875+
public virtual SqlExpression<T> OrderByDescending<Table1, Table2, Table3, Table4>(Expression<Func<Table1, Table2, Table3, Table4, object>> fields) => OrderByDescendingInternal(fields);
876+
public virtual SqlExpression<T> OrderByDescending<Table1, Table2, Table3, Table4, Table5>(Expression<Func<Table1, Table2, Table3, Table4, Table5, object>> fields) => OrderByDescendingInternal(fields);
874877

875878
private SqlExpression<T> OrderByDescendingInternal(Expression keySelector)
876879
{
@@ -919,10 +922,11 @@ public virtual SqlExpression<T> ThenByDescending(Expression<Func<T, object>> key
919922
return ThenByDescendingInternal(keySelector);
920923
}
921924

922-
public virtual SqlExpression<T> ThenByDescending<Table>(Expression<Func<Table, object>> keySelector)
923-
{
924-
return ThenByDescendingInternal(keySelector);
925-
}
925+
public virtual SqlExpression<T> ThenByDescending<Table>(Expression<Func<Table, object>> fields) => ThenByDescendingInternal(fields);
926+
public virtual SqlExpression<T> ThenByDescending<Table1, Table2>(Expression<Func<Table1, Table2, object>> fields) => ThenByDescendingInternal(fields);
927+
public virtual SqlExpression<T> ThenByDescending<Table1, Table2, Table3>(Expression<Func<Table1, Table2, Table3, object>> fields) => ThenByDescendingInternal(fields);
928+
public virtual SqlExpression<T> ThenByDescending<Table1, Table2, Table3, Table4>(Expression<Func<Table1, Table2, Table3, Table4, object>> fields) => ThenByDescendingInternal(fields);
929+
public virtual SqlExpression<T> ThenByDescending<Table1, Table2, Table3, Table4, Table5>(Expression<Func<Table1, Table2, Table3, Table4, Table5, object>> fields) => ThenByDescendingInternal(fields);
926930

927931
private SqlExpression<T> ThenByDescendingInternal(Expression keySelector)
928932
{

tests/ServiceStack.OrmLite.Tests/OrderByTests.cs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,30 @@ public void Can_OrderBy_and_ThenBy()
5252
Assert.That(tracks.First().Letter, Is.EqualTo("A"));
5353
Assert.That(tracks.Last().Letter, Is.EqualTo("C"));
5454
}
55-
}
55+
}
56+
57+
[Test]
58+
public void Can_OrderBy_multi_table_expression()
59+
{
60+
using (var db = OpenDbConnection())
61+
{
62+
db.DropAndCreateTable<LetterFrequency>();
63+
db.DropAndCreateTable<LetterWeighting>();
64+
65+
var letters = "A,B,C,D,E".Split(',');
66+
var i = 0;
67+
letters.Each(letter => {
68+
var id = db.Insert(new LetterFrequency {Letter = letter}, selectIdentity: true);
69+
db.Insert(new LetterWeighting {LetterFrequencyId = id, Weighting = ++i * 10});
70+
});
71+
72+
var q = db.From<LetterFrequency>()
73+
.Join<LetterWeighting>()
74+
.OrderBy<LetterFrequency, LetterWeighting>((f, w) => f.Id > w.Weighting ? f.Id : w.Weighting);
75+
76+
var results = db.Select(q);
77+
}
78+
}
79+
5680
}
5781
}

0 commit comments

Comments
 (0)