@@ -361,7 +361,6 @@ private SqlExpression<T> InternalSelect(Expression fields, bool distinct=false)
361361 /// <param name='fields'>
362362 /// x=> x.SomeProperty1 or x=> new{ x.SomeProperty1, x.SomeProperty2}
363363 /// </param>
364- /// </typeparam>
365364 public virtual SqlExpression < T > Select ( Expression < Func < T , object > > fields )
366365 {
367366 return InternalSelect ( fields ) ;
@@ -1510,10 +1509,7 @@ public string SelectExpression
15101509 BuildSelectExpression ( string . Empty , false ) ;
15111510 return selectExpression ;
15121511 }
1513- set
1514- {
1515- selectExpression = value ;
1516- }
1512+ set => selectExpression = value ;
15171513 }
15181514
15191515 public string FromExpression
@@ -2181,8 +2177,21 @@ private object SetAnonTypePropertyNamesForSelectExpression(object expr, Expressi
21812177 var methodCallExpr = arg as MethodCallExpression ;
21822178 var mi = methodCallExpr ? . Method ;
21832179 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 ) ;
21862195
21872196 if ( arg is ConditionalExpression ce || // new { Alias = x.Value > 1 ? 1 : x.Value }
21882197 arg is BinaryExpression be || // new { Alias = x.First + " " + x.Last }
@@ -2194,7 +2203,7 @@ private object SetAnonTypePropertyNamesForSelectExpression(object expr, Expressi
21942203 ? converter . ToQuotedString ( expr . GetType ( ) , expr )
21952204 : expr . ToString ( ) ;
21962205
2197- return new PartialSqlString ( OrmLiteUtils . UnquotedColumnName ( strExpr ) != member . Name
2206+ return new PartialSqlString ( OrmLiteUtils . UnquotedColumnName ( strExpr ) != member . Name
21982207 ? strExpr + " AS " + member . Name
21992208 : strExpr ) ;
22002209 }
@@ -2835,6 +2844,9 @@ protected virtual object VisitSqlMethodCall(MethodCallExpression m)
28352844 case nameof ( Sql . In ) :
28362845 statement = ConvertInExpressionToSql ( m , quotedColName ) ;
28372846 break ;
2847+ case nameof ( Sql . Asc ) :
2848+ statement = $ "{ quotedColName } ASC";
2849+ break ;
28382850 case nameof ( Sql . Desc ) :
28392851 statement = $ "{ quotedColName } DESC";
28402852 break ;
@@ -2860,7 +2872,16 @@ protected virtual object VisitSqlMethodCall(MethodCallExpression m)
28602872 break ;
28612873 case nameof ( Sql . JoinAlias ) :
28622874 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+ }
28642885 break ;
28652886 case nameof ( Sql . Custom ) :
28662887 statement = quotedColName . ToString ( ) ;
0 commit comments