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

Commit b245e31

Browse files
committed
Only include select aliases in select expressions
1 parent 0a64835 commit b245e31

2 files changed

Lines changed: 31 additions & 3 deletions

File tree

src/ServiceStack.OrmLite/Expressions/SqlExpression.cs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public abstract partial class SqlExpression<T> : ISqlExpression, IHasUntypedSqlE
4848
protected bool selectDistinct = false;
4949
protected bool visitedExpressionIsTableColumn = false;
5050
protected bool skipParameterizationForThisExpression = false;
51+
protected bool isSelectExpression = false;
5152
private bool hasEnsureConditions = false;
5253
private bool inSqlMethodCall = false;
5354

@@ -346,7 +347,11 @@ private SqlExpression<T> InternalSelect(Expression fields, bool distinct=false)
346347
Reset(sep=string.Empty);
347348

348349
CustomSelect = true;
350+
351+
isSelectExpression = true;
349352
var selectSql = Visit(fields);
353+
isSelectExpression = false;
354+
350355
if (!IsSqlClass(selectSql))
351356
{
352357
selectSql = ConvertToParam(selectSql);
@@ -2100,10 +2105,12 @@ protected virtual object VisitNew(NewExpression nex)
21002105
if (isAnonType)
21012106
{
21022107
var exprs = VisitExpressionList(nex.Arguments);
2103-
2104-
for (var i = 0; i < exprs.Count; ++i)
2108+
if (isSelectExpression)
21052109
{
2106-
exprs[i] = SetAnonTypePropertyNamesForSelectExpression(exprs[i], nex.Arguments[i], nex.Members[i]);
2110+
for (var i = 0; i < exprs.Count; ++i)
2111+
{
2112+
exprs[i] = SetAnonTypePropertyNamesForSelectExpression(exprs[i], nex.Arguments[i], nex.Members[i]);
2113+
}
21072114
}
21082115

21092116
return new SelectList(exprs);

tests/ServiceStack.OrmLite.Tests/OrderByTests.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,5 +83,26 @@ public void Can_OrderByFields()
8383
Assert.That(OrmLiteUtils.OrderByFields(d,"-a,b").NormalizeQuotes(), Is.EqualTo("'a' desc, 'b'"));
8484
Assert.That(OrmLiteUtils.OrderByFields(d,"a,-b").NormalizeQuotes(), Is.EqualTo("'a', 'b' desc"));
8585
}
86+
87+
[Test]
88+
public void Can_Multi_OrderBy_AliasValue()
89+
{
90+
using var db = OpenDbConnection();
91+
92+
db.DropAndCreateTable<LetterFrequency>();
93+
var items = 5.Times(x => new LetterFrequency {
94+
Letter = $"{'A' + x}",
95+
Value = x + 1
96+
});
97+
db.InsertAll(items);
98+
99+
OrmLiteUtils.PrintSql();
100+
var q = db.From<LetterFrequency>();
101+
q.OrderBy(x => new { x.Value });
102+
// q.OrderBy(x => x.Value);
103+
var results = db.Select(q);
104+
105+
Assert.That(results.Map(x => x.Value), Is.EqualTo(new[]{ 1, 2, 3, 4, 5}));
106+
}
86107
}
87108
}

0 commit comments

Comments
 (0)