public static ConstructedValueExpression AddDictionaryPopulateStatements(ICompiler values, MapTypeContext context, Type elementType, Expression dictVar, MethodInfo addMethod) { var expressions = new List <Expression>(); var variables = new List <ParameterExpression>(); if (context.Name == null) { var firstColumnsByName = context.GetFirstIndexForEachColumnName(); foreach (var column in firstColumnsByName) { var substate = context.GetSubstateForProperty(column.CanonicalName, null, elementType); var getScalarExpression = values.Compile(substate); expressions.AddRange(getScalarExpression.Expressions); expressions.Add( Expression.Call( dictVar, addMethod, Expression.Constant(column.OriginalName), getScalarExpression.FinalValue ) ); variables.AddRange(getScalarExpression.Variables); } return(new ConstructedValueExpression(expressions, null, variables)); } var columns = context.GetFirstIndexForEachColumnName(); foreach (var column in columns) { var keyName = column.OriginalName.Substring(context.CurrentPrefix.Length); var childName = column.CanonicalName.Substring(context.CurrentPrefix.Length); var columnSubstate = context.GetSubstateForColumn(column, elementType, childName); var getScalarExpression = values.Compile(columnSubstate); expressions.AddRange(getScalarExpression.Expressions); expressions.Add( Expression.Call( dictVar, addMethod, Expression.Constant(keyName), getScalarExpression.FinalValue ) ); variables.AddRange(getScalarExpression.Variables); } return(new ConstructedValueExpression(expressions, null, variables)); }