@@ -14,6 +14,7 @@ public class SQLQueryInsert<T> : ISQLQueryFragment, ISQLQuery, ISQLQueryWithOutp
1414 private readonly List < string > _tableColumns ;
1515 private readonly IDictionary < string , Expression > _insertParameters ;
1616 private readonly IDictionary < string , object > _insertProperties ;
17+ private readonly Expression [ ] _insertColumns ;
1718
1819 internal SQLQueryInsert ( IList < ISQLQueryFragment > fragments , SQLQuerySelect select )
1920 {
@@ -73,6 +74,21 @@ internal SQLQueryInsert(IList<ISQLQueryFragment> fragments, Expression<Action<T>
7374 AddSqlQueryInsertParameters ( ) ;
7475 }
7576
77+ internal SQLQueryInsert ( IList < ISQLQueryFragment > fragments , SQLQuerySelect select , Expression < Func < T , object > > [ ] columns )
78+ {
79+ _fragments = fragments ;
80+
81+ _select = select ;
82+
83+ _insertColumns = columns ;
84+
85+ _tableColumns = GetTableColumns ( ) ;
86+
87+ _fragments . Add ( this ) ;
88+
89+ AddSqlQueryInsertSelect ( ) ;
90+ }
91+
7692 public SQLQueryFragmentType FragmentType { get { return SQLQueryFragmentType . Insert ; } }
7793
7894 public SQLQueryOutput < TS > Output < TS > ( Expression < Func < T , TS > > output )
@@ -119,6 +135,10 @@ public string Translate(ISQLQueryTranslator expressionTranslator)
119135 {
120136 insertBuilder . Append ( $ "{ Environment . NewLine } ({ string . Join ( ", " , _tableColumns . Where ( c => _insertParameters . ContainsKey ( c ) ) . Select ( c => $ "[{ c } ]") ) } )") ;
121137 }
138+ else if ( _insertColumns != null )
139+ {
140+ insertBuilder . Append ( $ "{ Environment . NewLine } ({ string . Join ( ", " , _insertColumns . Select ( u => expressionTranslator . GetColumnsWithoutTableAlias ( expressionTranslator . Translate ( u , FragmentType ) ) ) ) } )") ;
141+ }
122142 else
123143 {
124144 insertBuilder . Append ( $ "{ Environment . NewLine } ({ string . Join ( ", " , _select . Select . Select ( u => expressionTranslator . GetColumnsWithoutTableAlias ( expressionTranslator . Translate ( u , FragmentType ) ) ) ) } )") ;
@@ -164,7 +184,7 @@ private List<string> GetTableColumns()
164184 }
165185 }
166186
167- public class SQLQueryInsertValues : ISQLQueryFragment
187+ internal class SQLQueryInsertValues : ISQLQueryFragment
168188 {
169189 private readonly List < string > _tableColumns ;
170190 private readonly IDictionary < string , object > _insertProperties ;
@@ -192,7 +212,7 @@ public string Translate(ISQLQueryTranslator expressionTranslator)
192212 }
193213 }
194214
195- public class SQLQueryInsertValuesFromSelect < T > : ISQLQueryFragment
215+ internal class SQLQueryInsertValuesFromSelect < T > : ISQLQueryFragment
196216 {
197217 private readonly SQLQuerySelect _select ;
198218
@@ -224,7 +244,7 @@ public string Translate(ISQLQueryTranslator expressionTranslator)
224244 }
225245 }
226246
227- public class SQLQueryInsertParameters < T > : ISQLQueryFragment
247+ internal class SQLQueryInsertParameters < T > : ISQLQueryFragment
228248 {
229249 private readonly List < string > _tableColumns ;
230250 private IDictionary < string , Expression > _insertParameters ;
0 commit comments