@@ -361,7 +361,6 @@ private SqlExpression<T> InternalSelect(Expression fields, bool distinct=false)
361
361
/// <param name='fields'>
362
362
/// x=> x.SomeProperty1 or x=> new{ x.SomeProperty1, x.SomeProperty2}
363
363
/// </param>
364
- /// </typeparam>
365
364
public virtual SqlExpression < T > Select ( Expression < Func < T , object > > fields )
366
365
{
367
366
return InternalSelect ( fields ) ;
@@ -1510,10 +1509,7 @@ public string SelectExpression
1510
1509
BuildSelectExpression ( string . Empty , false ) ;
1511
1510
return selectExpression ;
1512
1511
}
1513
- set
1514
- {
1515
- selectExpression = value ;
1516
- }
1512
+ set => selectExpression = value ;
1517
1513
}
1518
1514
1519
1515
public string FromExpression
@@ -2181,8 +2177,21 @@ private object SetAnonTypePropertyNamesForSelectExpression(object expr, Expressi
2181
2177
var methodCallExpr = arg as MethodCallExpression ;
2182
2178
var mi = methodCallExpr ? . Method ;
2183
2179
var declareType = mi ? . DeclaringType ;
2184
- if ( declareType != null && declareType . Name == "Sql" && mi . Name != "Desc" && mi . Name != "Asc" && mi . Name != "As" && mi . Name != "AllFields" )
2185
- return new PartialSqlString ( expr + " AS " + member . Name ) ; // new { Alias = Sql.Count("*") }
2180
+ if ( declareType != null && declareType . Name == nameof ( Sql ) )
2181
+ {
2182
+ if ( mi . Name == nameof ( Sql . TableAlias ) || mi . Name == nameof ( Sql . JoinAlias ) )
2183
+ {
2184
+ if ( expr is PartialSqlString ps && ps . Text . IndexOf ( ',' ) >= 0 )
2185
+ return ps ; // new { buyer = Sql.TableAlias(b, "buyer")
2186
+ return new PartialSqlString ( expr + " AS " + member . Name ) ; // new { BuyerName = Sql.TableAlias(b.Name, "buyer") }
2187
+ }
2188
+
2189
+ if ( mi . Name != nameof ( Sql . Desc ) && mi . Name != nameof ( Sql . Asc ) && mi . Name != nameof ( Sql . As ) && mi . Name != nameof ( Sql . AllFields ) )
2190
+ return new PartialSqlString ( expr + " AS " + member . Name ) ; // new { Alias = Sql.Count("*") }
2191
+ }
2192
+
2193
+ if ( expr is string s && s == Sql . EOT ) // new { t1 = Sql.EOT, t2 = "0 EOT" }
2194
+ return new PartialSqlString ( s ) ;
2186
2195
2187
2196
if ( arg is ConditionalExpression ce || // new { Alias = x.Value > 1 ? 1 : x.Value }
2188
2197
arg is BinaryExpression be || // new { Alias = x.First + " " + x.Last }
@@ -2194,7 +2203,7 @@ private object SetAnonTypePropertyNamesForSelectExpression(object expr, Expressi
2194
2203
? converter . ToQuotedString ( expr . GetType ( ) , expr )
2195
2204
: expr . ToString ( ) ;
2196
2205
2197
- return new PartialSqlString ( OrmLiteUtils . UnquotedColumnName ( strExpr ) != member . Name
2206
+ return new PartialSqlString ( OrmLiteUtils . UnquotedColumnName ( strExpr ) != member . Name
2198
2207
? strExpr + " AS " + member . Name
2199
2208
: strExpr ) ;
2200
2209
}
@@ -2835,6 +2844,9 @@ protected virtual object VisitSqlMethodCall(MethodCallExpression m)
2835
2844
case nameof ( Sql . In ) :
2836
2845
statement = ConvertInExpressionToSql ( m , quotedColName ) ;
2837
2846
break ;
2847
+ case nameof ( Sql . Asc ) :
2848
+ statement = $ "{ quotedColName } ASC";
2849
+ break ;
2838
2850
case nameof ( Sql . Desc ) :
2839
2851
statement = $ "{ quotedColName } DESC";
2840
2852
break ;
@@ -2860,7 +2872,16 @@ protected virtual object VisitSqlMethodCall(MethodCallExpression m)
2860
2872
break ;
2861
2873
case nameof ( Sql . JoinAlias ) :
2862
2874
case nameof ( Sql . TableAlias ) :
2863
- statement = args [ 0 ] + "." + quotedColName . ToString ( ) . LastRightPart ( '.' ) ;
2875
+ if ( quotedColName is SelectList && m . Arguments . Count == 2 && m . Arguments [ 0 ] is ParameterExpression p )
2876
+ {
2877
+ var paramModelDef = p . Type . GetModelDefinition ( ) ;
2878
+ var alias = Visit ( m . Arguments [ 1 ] ) . ToString ( ) ;
2879
+ statement = new SelectList ( DialectProvider . GetColumnNames ( paramModelDef , alias ) ) . ToString ( ) ;
2880
+ }
2881
+ else
2882
+ {
2883
+ statement = args [ 0 ] + "." + quotedColName . ToString ( ) . LastRightPart ( '.' ) ;
2884
+ }
2864
2885
break ;
2865
2886
case nameof ( Sql . Custom ) :
2866
2887
statement = quotedColName . ToString ( ) ;
0 commit comments