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));
        }