private static void AddDerivedTargetTypeMappings( IObjectMappingData declaredTypeMappingData, IEnumerable <Type> derivedTargetTypes, ICollection <Expression> derivedTypeMappingExpressions) { var declaredTypeMapperData = declaredTypeMappingData.MapperData; derivedTargetTypes = derivedTargetTypes .OrderBy(t => t, TypeComparer.MostToLeastDerived); foreach (var derivedTargetType in derivedTargetTypes) { var targetTypeCondition = GetTargetIsDerivedTypeCheck(derivedTargetType, declaredTypeMapperData); var ifDerivedTargetTypeThenMap = GetIfConditionThenMapExpression( declaredTypeMappingData, targetTypeCondition, declaredTypeMapperData.SourceObject, derivedTargetType); derivedTypeMappingExpressions.AddUnlessNullOrEmpty(ifDerivedTargetTypeThenMap); } }