public static Expression GetChildMapping( IObjectMappingData childMappingData, MappingValues mappingValues, int dataSourceIndex, ObjectMapperData declaredTypeMapperData) { var childMapperData = childMappingData.MapperData; if (childMapperData.IsRepeatMapping && childMapperData.RuleSet.RepeatMappingStrategy.AppliesTo(childMapperData)) { var repeatMappingCall = childMapperData .RuleSet .RepeatMappingStrategy .GetMapRepeatedCallFor( childMappingData, mappingValues, dataSourceIndex, declaredTypeMapperData); return(repeatMappingCall); } var inlineMappingBlock = GetInlineMappingBlock( childMappingData, mappingValues, MappingDataCreationFactory.ForChild(mappingValues, dataSourceIndex, childMapperData)); return(inlineMappingBlock); }
public static Expression GetElementMapping( IObjectMappingData elementMappingData, Expression sourceElementValue, Expression targetElementValue) { var enumerableMapperData = elementMappingData.Parent.MapperData; var elementMapperData = elementMappingData.MapperData; Expression enumerableIndex, parentMappingDataObject; if (elementMapperData.Context.IsStandalone) { enumerableIndex = elementMapperData.EnumerableIndex.GetNullableValueAccess(); parentMappingDataObject = typeof(IObjectMappingData).ToDefaultExpression(); } else { enumerableIndex = enumerableMapperData.EnumerablePopulationBuilder.Counter; parentMappingDataObject = enumerableMapperData.MappingDataObject; } var mappingValues = new MappingValues( sourceElementValue, targetElementValue, enumerableIndex); elementMapperData.Context.IsForNewElement = (targetElementValue.NodeType == ExpressionType.Default) || (elementMapperData.DeclaredTypeMapperData?.Context.IsForNewElement == true); if (elementMapperData.IsRepeatMapping && elementMapperData.RuleSet.RepeatMappingStrategy.AppliesTo(elementMapperData)) { var repeatMappingCall = elementMapperData .RuleSet .RepeatMappingStrategy .GetMapRepeatedCallFor( elementMappingData, mappingValues, enumerableMapperData.DataSourceIndex, enumerableMapperData); return(repeatMappingCall); } var inlineMappingBlock = GetInlineMappingBlock( elementMappingData, mappingValues, MappingDataCreationFactory.ForElement(mappingValues, parentMappingDataObject, elementMapperData)); return(inlineMappingBlock); }
public static Expression UseLocalToTargetDataSourceVariableIfAppropriate( ObjectMapperData mapperData, ObjectMapperData toTargetMapperData, Expression toTargetDataSourceValue, Expression mappingExpression) { if (!toTargetMapperData.Context.UsesMappingDataObject) { return(mappingExpression); } return(UseLocalValueVariable( toTargetMapperData.MappingDataObject, MappingDataCreationFactory.ForToTarget(mapperData, toTargetDataSourceValue), mappingExpression)); }
private static Expression GetDerivedTypeRootMapping( IObjectMappingData derivedTypeMappingData, Expression sourceValue, Expression targetValue) { var mappingValues = new MappingValues( sourceValue, targetValue, typeof(int?).ToDefaultExpression()); var inlineMappingBlock = MappingFactory.GetInlineMappingBlock( derivedTypeMappingData, mappingValues, MappingDataCreationFactory.ForDerivedType(derivedTypeMappingData.MapperData)); return(inlineMappingBlock); }