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(PropertyIfNotNullExpression node) { var member = node.Inner as MemberExpression; if (member != null) { Append(member.Member.Name); } var convert = node.Inner as UnaryExpression; if (convert != null && convert.NodeType == ExpressionType.Convert) { Visit(convert.Operand); } else { Visit(node.Inner); } return(node); }
void OutRightHandSideOf(PropertyIfNotNullExpression owner) { Visit(owner.Owner); Append("?!"); }