Exemplo n.º 1
0
        Expression BuildBody(Expression owner, int index, MappingStrategy strategy, ConversionStep conversion)
        {
            if (index == sourcePropertyChain.Length - 1)
            {
                return(SetValue(strategy, conversion, owner));
            }

            if (nullableProperties.Contains(sourcePropertyChain[index]) == false)
            {
                return(BuildBody(Expression.Property(owner, sourcePropertyChain[index + 1]), index + 1, strategy, conversion));
            }
            var local      = Expression.Variable(owner.Type);
            var property   = new PropertyIfNotNullInnerExpression(Expression.Property(local, sourcePropertyChain[index + 1]));
            var body       = BuildBody(property, index + 1, strategy, conversion);
            var expression = new PropertyIfNotNullExpression(owner, body, local, TargetValueType);

            property.Owner = expression;
            return(expression);
        }
Exemplo n.º 2
0
        Expression BuildBody(Expression owner, int index, MappingStrategy strategy, ConversionStep conversion)
        {
            if (index == sourcePropertyChain.Length - 1)
            {
                return SetValue(strategy, conversion, owner);
            }

            if (nullableProperties.Contains(sourcePropertyChain[index]) == false)
            {
                return BuildBody(Expression.Property(owner, sourcePropertyChain[index + 1]), index + 1, strategy, conversion);
            }
            var local = Expression.Variable(owner.Type);
            var property = new PropertyIfNotNullInnerExpression(Expression.Property(local, sourcePropertyChain[index + 1]));
            var body = BuildBody(property, index + 1, strategy, conversion);
            var expression = new PropertyIfNotNullExpression(owner, body, local, TargetValueType);
            property.Owner = expression;
            return expression;
        }
Exemplo n.º 3
0
 Expression VisitCustom(PropertyIfNotNullInnerExpression node)
 {
     OutRightHandSideOf(node.Owner);
     Append(node.Inner.Member.Name);
     return(node);
 }