@@ -126,74 +126,31 @@ public double Avg<TMember>(Expression<Func<T1, TMember>> column)
126126 public ISelect < T1 , T2 > FromQuery < T2 > ( ISelect < T2 > select2 ) where T2 : class
127127 {
128128 var ret = From < T2 > ( ) ;
129- var retsp = ret as Select0Provider ;
130- var rettbs = retsp . _tables ;
131- if ( rettbs [ 1 ] . Table == null ) rettbs [ 1 ] . Table = TableInfo . GetDefaultTable ( typeof ( T2 ) ) ;
132- var select2sp = select2 as Select0Provider ;
133- ( _diymemexpWithTempQuery as WithTempQueryParser ) ? . Append ( select2sp , rettbs [ 1 ] ) ;
134- string sql2 = null ;
135- if ( select2sp . _diymemexpWithTempQuery == null )
136- {
137- if ( select2sp . _tableRule == null && select2sp . _tables [ 0 ] . Table . Type == typeof ( T2 ) && select2sp . IsDefaultSqlContent == true )
138- return ret ;
139- sql2 = select2 ? . ToSql ( a => a , FieldAliasOptions . AsProperty ) ;
140- }
141- else
142- {
143- if ( retsp . _diymemexpWithTempQuery == null )
144- retsp . _diymemexpWithTempQuery = new WithTempQueryParser ( null , null , null , null ) . Append ( select2sp , rettbs [ 1 ] ) ;
145- if ( select2sp . _tableRule != null && select2sp . IsDefaultSqlContent == true )
146- {
147- sql2 = select2sp . _tableRule ( select2sp . _tables [ 0 ] . Table . Type , null ) ;
148- if ( sql2 . StartsWith ( "(" ) && sql2 . EndsWith ( ")" ) ) sql2 = sql2 . Substring ( 1 , sql2 . Length - 2 ) ;
149- if ( sql2 . StartsWith ( " \r \n " ) ) sql2 = sql2 . Substring ( 3 ) ;
150- }
151- if ( string . IsNullOrWhiteSpace ( sql2 ) )
152- sql2 = select2 ? . ToSql ( "*" ) ;
153- }
154- if ( retsp . _tableRules . Count > 0 )
155- {
156- var tbrules = retsp . _tableRules . ToList ( ) ;
157- retsp . _tableRules . Clear ( ) ;
158- tbrules . ForEach ( tbrule =>
159- {
160- var tbruler1 = tbrule ( typeof ( T1 ) , retsp . _tables [ 0 ] . Table . DbName ) ;
161- if ( string . IsNullOrWhiteSpace ( tbruler1 ) == false )
162- retsp . _tableRules . Add ( ( type , old ) =>
163- {
164- if ( type == typeof ( T1 ) ) return tbruler1 ;
165- if ( type == typeof ( T2 ) ) return $ "( \r \n { sql2 } )";
166-
167- return old ;
168- } ) ;
169- } ) ;
170- }
171- if ( retsp . _tableRules . Count == 0 ) ret . WithSql ( null , $ " \r \n { sql2 } ") ;
172- return ret ;
129+ return FromQueryMulti ( ret , new [ ] { typeof ( T2 ) } , new [ ] { select2 as Select0Provider } ) ;
173130 }
174131
175132 public TQuery FromQueryMulti < TQuery > ( TQuery ret , Type [ ] entityTypes , Select0Provider [ ] querys )
176133 {
177134 var retsp = ret as Select0Provider ;
178135 var rettbs = retsp . _tables ;
179- var sql2List = new string [ rettbs . Count - 1 ] ;
180- for ( var a = 1 ; a < rettbs . Count ; a ++ )
136+ var sql2List = new string [ querys . Length ] ;
137+ for ( var a = 0 ; a < querys . Length ; a ++ )
181138 {
182- var select2 = querys [ a - 1 ] ;
183- var entityType2 = entityTypes [ a - 1 ] ;
184- var rettb2 = rettbs [ a ] ;
139+ var select2 = querys [ a ] ;
140+ var entityType2 = entityTypes [ a ] ;
141+ var rettb2 = rettbs [ a + 1 ] ;
185142 if ( rettb2 . Table == null ) rettb2 . Table = TableInfo . GetDefaultTable ( entityType2 ) ;
186- ( _diymemexpWithTempQuery as WithTempQueryParser ) ? . Append ( select2 , rettb2 ) ;
143+ ( retsp . _diymemexpWithTempQuery as WithTempQueryParser ) ? . Append ( select2 , rettb2 ) ;
187144 string sql2 = null ;
188145 if ( select2 . _diymemexpWithTempQuery == null )
189146 {
190147 if ( select2 . _tableRule == null && select2 . _tables [ 0 ] . Table . Type == entityType2 && select2 . IsDefaultSqlContent == true )
191148 continue ;
192- var selectorParameter = Expression . Parameter ( entityType2 ) ;
149+ var selectorParameter = Expression . Parameter ( entityType2 , select2 . _tables [ 0 ] . Alias ) ;
193150 var selector = Expression . Lambda ( selectorParameter , selectorParameter ) ;
194151 select2 . _tables [ 0 ] . Parameter = selectorParameter ;
195- var af = this . GetExpressionField ( selector , FieldAliasOptions . AsProperty ) ;
196- sql2 = this . ToSql ( af . field ) ;
152+ var af = select2 . GetExpressionField ( selector , FieldAliasOptions . AsProperty ) ;
153+ sql2 = select2 . ToSqlBase ( af . field ) ;
197154 }
198155 else
199156 {
@@ -208,7 +165,7 @@ public TQuery FromQueryMulti<TQuery>(TQuery ret, Type[] entityTypes, Select0Prov
208165 if ( string . IsNullOrWhiteSpace ( sql2 ) )
209166 sql2 = select2 . ToSqlBase ( "*" ) ;
210167 }
211- sql2List [ a - 1 ] = sql2 ;
168+ sql2List [ a ] = sql2 ;
212169 }
213170 if ( retsp . _tableRules . Count > 0 )
214171 {
@@ -232,7 +189,7 @@ public TQuery FromQueryMulti<TQuery>(TQuery ret, Type[] entityTypes, Select0Prov
232189 retsp . AsTableBase ( ( type , old ) =>
233190 {
234191 for ( var a = 0 ; a < entityTypes . Length ; a ++ )
235- if ( entityTypes [ a ] == type ) return string . IsNullOrWhiteSpace ( sql2List [ a ] ) ? old : $ "({ sql2List [ a ] } )";
192+ if ( entityTypes [ a ] == type ) return string . IsNullOrWhiteSpace ( sql2List [ a ] ) ? old : $ "( \r \n { sql2List [ a ] } )";
236193 return old ;
237194 } ) ;
238195 }
0 commit comments