@@ -1246,13 +1246,30 @@ private Expression CreateNewExpression(List<DynamicProperty> properties, List<Ex
1246
1246
ConstructorInfo ctor = type . GetConstructor ( propertyTypes ) ;
1247
1247
if ( ctor ! = null && ctor . GetParameters ( ) . Length == expressions . Count )
1248
1248
{
1249
- return Expression . New ( ctor , expressions , ( IEnumerable < MemberInfo > ) propertyInfos ) ;
1249
+ var expressionsPromoted = new List < Expression > ( ) ;
1250
+
1251
+ // Loop all expressions and promote if needed
1252
+ for ( int i = 0 ; i < propertyTypes . Length ; i ++ )
1253
+ {
1254
+ Type propertyType = propertyTypes [ i ] ;
1255
+ Type expressionType = expressions [ i ] . Type ;
1256
+
1257
+ // Promote from Type to Nullable Type if needed
1258
+ expressionsPromoted . Add ( ExpressionPromoter . Promote ( expressions [ i ] , propertyType , true , true ) ) ;
1259
+ }
1260
+
1261
+ return Expression . New ( ctor , expressionsPromoted , ( IEnumerable < MemberInfo > ) propertyInfos ) ;
1250
1262
}
1251
1263
1252
1264
MemberBinding [ ] bindings = new MemberBinding [ properties . Count ] ;
1253
1265
for ( int i = 0 ; i < bindings . Length ; i ++ )
1254
1266
{
1255
- bindings [ i ] = Expression . Bind ( type . GetProperty ( properties [ i ] . Name ) , expressions [ i ] ) ;
1267
+ PropertyInfo property = type . GetProperty ( properties [ i ] . Name ) ;
1268
+ Type propertyType = property . PropertyType ;
1269
+ Type expressionType = expressions [ i ] . Type ;
1270
+
1271
+ // Promote from Type to Nullable Type if needed
1272
+ bindings [ i ] = Expression . Bind ( property , ExpressionPromoter . Promote ( expressions [ i ] , propertyType , true , true ) ) ;
1256
1273
}
1257
1274
1258
1275
return Expression . MemberInit ( Expression . New ( type ) , bindings ) ;
0 commit comments