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); }
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; }
Expression VisitCustom(PropertyIfNotNullInnerExpression node) { OutRightHandSideOf(node.Owner); Append(node.Inner.Member.Name); return(node); }