public Expression BuildSource(Expression expression, Type destinationType, IMappingConfiguration mappingConfiguration)
        {
            if (!destinationType.IsDictionary())
            {
                return(null);
            }

            var destinationElementType = TypeUtils.GetElementTypeOfEnumerable(destinationType);

            var add = destinationType.GetMethod("Add");
            var destinationKeyType   = destinationElementType.GetProperty("Key").PropertyType;
            var destinationValueType = destinationElementType.GetProperty("Value").PropertyType;

            IEnumerable <ElementInit> initializers = expression.Type.GetReadableMembers()
                                                     .Where(m => !excluded.Contains(m.Name))
                                                     .Where(m => !IsPropertyGetter(m))
                                                     .Select(property => Expression.ElementInit(add,
                                                                                                BuildSource(mappingConfiguration, destinationKeyType, Expression.Constant(property.Name)),
                                                                                                BuildSource(mappingConfiguration, destinationValueType, ExpressionEx.Member(expression, property))));

            return(Expression.ListInit(Expression.New(destinationType), initializers));
        }
Example #2
0
 public Expression BuildSource(Expression x, Type destinationType, IMappingConfiguration mappingConfiguration)
 {
     return(ExpressionEx.Member(x, memberInfo));
 }