Beispiel #1
0
        public ExpressionResolutionResult GetExpressionResolutionResult(
            ExpressionResolutionResult expressionResolutionResult, IMemberMap propertyMap, LetPropertyMaps letPropertyMaps)
        {
            var mapFrom = propertyMap.CustomMapExpression;

            if (!IsSubQuery() || letPropertyMaps.ConfigurationProvider.ResolveTypeMap(propertyMap.SourceType, propertyMap.DestinationType) == null)
            {
                return(new ExpressionResolutionResult(mapFrom.ReplaceParameters(propertyMap.CheckCustomSource(expressionResolutionResult, letPropertyMaps))));
            }
            var customSource = propertyMap.ProjectToCustomSource;

            if (customSource == null)
            {
                return(new ExpressionResolutionResult(letPropertyMaps.GetSubQueryMarker(mapFrom), mapFrom));
            }
            var newMapFrom = IncludedMember.Chain(customSource, mapFrom);

            return(new ExpressionResolutionResult(letPropertyMaps.GetSubQueryMarker(newMapFrom), newMapFrom));

            bool IsSubQuery()
            {
                if (!(mapFrom.Body is MethodCallExpression methodCall))
                {
                    return(false);
                }
                var method = methodCall.Method;

                return(method.IsStatic && method.DeclaringType == typeof(Enumerable));
            }
        }
Beispiel #2
0
 public ConstructorParameterMap(ConstructorParameterMap parameterMap, IncludedMember includedMember) :
     this(includedMember.TypeMap, parameterMap.Parameter, parameterMap._sourceMembers, parameterMap.CanResolveValue) =>