@@ -287,6 +287,7 @@ class IncludeManyNewInit
287287 public Dictionary < string , IncludeManyNewInit > Childs { get ; } = new Dictionary < string , IncludeManyNewInit > ( ) ;
288288 public Expression CurrentExpression { get ; }
289289 public bool IsOutputPrimary { get ; set ; }
290+ public List < ColumnInfo > OutputColumns { get ; } = new List < ColumnInfo > ( ) ;
290291 public IncludeManyNewInit ( TableInfo table , Expression currentExpression )
291292 {
292293 this . Table = table ;
@@ -313,20 +314,26 @@ public List<TReturn> ToList<TReturn>(Expression<Func<T1, TReturn>> select)
313314 {
314315 var curIncNewInit = incNewInit ;
315316 Expression curParmExp = parmExp ;
316- for ( var a = 0 ; a < inc . Value . Length - 1 ; a ++ )
317+ for ( var a = 0 ; a < inc . Value . Item1 . Length - 1 ; a ++ )
317318 {
318- curParmExp = Expression . MakeMemberAccess ( parmExp , inc . Value [ a ] . Member ) ;
319- if ( curIncNewInit . Childs . ContainsKey ( inc . Value [ a ] . Member . Name ) == false )
320- curIncNewInit . Childs . Add ( inc . Value [ a ] . Member . Name , curIncNewInit = new IncludeManyNewInit ( _orm . CodeFirst . GetTableByEntity ( inc . Value [ a ] . Type ) , curParmExp ) ) ;
319+ curParmExp = Expression . MakeMemberAccess ( parmExp , inc . Value . Item1 [ a ] . Member ) ;
320+ if ( curIncNewInit . Childs . ContainsKey ( inc . Value . Item1 [ a ] . Member . Name ) == false )
321+ curIncNewInit . Childs . Add ( inc . Value . Item1 [ a ] . Member . Name , curIncNewInit = new IncludeManyNewInit ( _orm . CodeFirst . GetTableByEntity ( inc . Value . Item1 [ a ] . Type ) , curParmExp ) ) ;
321322 else
322- curIncNewInit = curIncNewInit . Childs [ inc . Value [ a ] . Member . Name ] ;
323+ curIncNewInit = curIncNewInit . Childs [ inc . Value . Item1 [ a ] . Member . Name ] ;
323324 }
324325 curIncNewInit . IsOutputPrimary = true ;
326+ var outcols = inc . Value . Item2 . Columns . Where ( a => a . Attribute . IsPrimary == false ) . ToArray ( ) ;
327+ if ( outcols . Any ( ) ) curIncNewInit . OutputColumns . AddRange ( outcols ) ;
325328 }
326329 MemberInitExpression GetIncludeManyNewInitExpression ( IncludeManyNewInit imni )
327330 {
328331 var bindings = new List < MemberBinding > ( ) ;
329- if ( imni . IsOutputPrimary ) bindings . AddRange ( imni . Table . Primarys . Select ( a => Expression . Bind ( imni . Table . Properties [ a . CsName ] , Expression . MakeMemberAccess ( imni . CurrentExpression , imni . Table . Properties [ a . CsName ] ) ) ) ) ;
332+ if ( imni . IsOutputPrimary )
333+ {
334+ bindings . AddRange ( imni . Table . Primarys . Select ( a => Expression . Bind ( imni . Table . Properties [ a . CsName ] , Expression . MakeMemberAccess ( imni . CurrentExpression , imni . Table . Properties [ a . CsName ] ) ) ) ) ;
335+ if ( imni . OutputColumns . Any ( ) ) bindings . AddRange ( imni . OutputColumns . Select ( a => Expression . Bind ( imni . Table . Properties [ a . CsName ] , Expression . MakeMemberAccess ( imni . CurrentExpression , imni . Table . Properties [ a . CsName ] ) ) ) ) ;
336+ }
330337 if ( imni . Childs . Any ( ) ) bindings . AddRange ( imni . Childs . Select ( a => Expression . Bind ( imni . Table . Properties [ a . Key ] , GetIncludeManyNewInitExpression ( a . Value ) ) ) ) ;
331338 var pgarrayToManys = imni . Table . GetAllTableRef ( ) . Select ( tr =>
332339 {
@@ -1514,7 +1521,7 @@ public ISelect<T1> IncludeMany<TNavigate>(Expression<Func<T1, IEnumerable<TNavig
15141521 for ( var a = 0 ; a < members . Count ; a ++ ) includeValue [ a ] = members [ a ] ;
15151522 includeValue [ includeValue . Length - 1 ] = expBody as MemberExpression ;
15161523 var includeKey = $ "{ string . Join ( "." , includeValue . Select ( a => a . Member . Name ) ) } ";
1517- if ( _includeInfo . ContainsKey ( includeKey ) == false ) _includeInfo . Add ( includeKey , includeValue ) ;
1524+ if ( _includeInfo . ContainsKey ( includeKey ) == false ) _includeInfo . Add ( includeKey , NativeTuple . Create ( includeValue , tbref ) ) ;
15181525 return this ;
15191526 }
15201527
@@ -1577,20 +1584,26 @@ async public Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<T1, TRetur
15771584 {
15781585 var curIncNewInit = incNewInit ;
15791586 Expression curParmExp = parmExp ;
1580- for ( var a = 0 ; a < inc . Value . Length - 1 ; a ++ )
1587+ for ( var a = 0 ; a < inc . Value . Item1 . Length - 1 ; a ++ )
15811588 {
1582- curParmExp = Expression . MakeMemberAccess ( parmExp , inc . Value [ a ] . Member ) ;
1583- if ( curIncNewInit . Childs . ContainsKey ( inc . Value [ a ] . Member . Name ) == false )
1584- curIncNewInit . Childs . Add ( inc . Value [ a ] . Member . Name , curIncNewInit = new IncludeManyNewInit ( _orm . CodeFirst . GetTableByEntity ( inc . Value [ a ] . Type ) , curParmExp ) ) ;
1589+ curParmExp = Expression . MakeMemberAccess ( parmExp , inc . Value . Item1 [ a ] . Member ) ;
1590+ if ( curIncNewInit . Childs . ContainsKey ( inc . Value . Item1 [ a ] . Member . Name ) == false )
1591+ curIncNewInit . Childs . Add ( inc . Value . Item1 [ a ] . Member . Name , curIncNewInit = new IncludeManyNewInit ( _orm . CodeFirst . GetTableByEntity ( inc . Value . Item1 [ a ] . Type ) , curParmExp ) ) ;
15851592 else
1586- curIncNewInit = curIncNewInit . Childs [ inc . Value [ a ] . Member . Name ] ;
1593+ curIncNewInit = curIncNewInit . Childs [ inc . Value . Item1 [ a ] . Member . Name ] ;
15871594 }
15881595 curIncNewInit . IsOutputPrimary = true ;
1596+ var outcols = inc . Value . Item2 . Columns . Where ( a => a . Attribute . IsPrimary == false ) . ToArray ( ) ;
1597+ if ( outcols . Any ( ) ) curIncNewInit . OutputColumns . AddRange ( outcols ) ;
15891598 }
15901599 MemberInitExpression GetIncludeManyNewInitExpression ( IncludeManyNewInit imni )
15911600 {
15921601 var bindings = new List < MemberBinding > ( ) ;
1593- if ( imni . IsOutputPrimary ) bindings . AddRange ( imni . Table . Primarys . Select ( a => Expression . Bind ( imni . Table . Properties [ a . CsName ] , Expression . MakeMemberAccess ( imni . CurrentExpression , imni . Table . Properties [ a . CsName ] ) ) ) ) ;
1602+ if ( imni . IsOutputPrimary )
1603+ {
1604+ bindings . AddRange ( imni . Table . Primarys . Select ( a => Expression . Bind ( imni . Table . Properties [ a . CsName ] , Expression . MakeMemberAccess ( imni . CurrentExpression , imni . Table . Properties [ a . CsName ] ) ) ) ) ;
1605+ if ( imni . OutputColumns . Any ( ) ) bindings . AddRange ( imni . OutputColumns . Select ( a => Expression . Bind ( imni . Table . Properties [ a . CsName ] , Expression . MakeMemberAccess ( imni . CurrentExpression , imni . Table . Properties [ a . CsName ] ) ) ) ) ;
1606+ }
15941607 if ( imni . Childs . Any ( ) ) bindings . AddRange ( imni . Childs . Select ( a => Expression . Bind ( imni . Table . Properties [ a . Key ] , GetIncludeManyNewInitExpression ( a . Value ) ) ) ) ;
15951608 var pgarrayToManys = imni . Table . GetAllTableRef ( ) . Select ( tr =>
15961609 {
0 commit comments