Esempio n. 1
0
 public ExpressionValue(Type sourceType, ValueInfo valueInfo, IMemberVisitor memberVisitor)
 {
     SourceType          = sourceType;
     ValueInfo           = valueInfo;
     MemberVisitor       = memberVisitor;
     this.LambdaProvider = CreateValueLambda(sourceType, valueInfo, memberVisitor);
 }
        public void ShouldGetExpectedExpressionFromNullableMemberPaths(string path, string expectedExpression)
        {
            var valueInfo     = ValueInfo.Parse(path);
            var memberVisitor = IMemberVisitor.GetObjectVisitor(typeof(SourceNullableClass));
            IValueLambdaProvider constLambda = new PathValueLambdaProvider(typeof(SourceNullableClass), valueInfo.NavigatePaths, memberVisitor);
            var lambda = constLambda.GetLambda();

            lambda.ToString().Should().Be(expectedExpression);
        }
Esempio n. 3
0
        //public IMemberVisitor GetMemberVisitor() { return this; }

        public void AcceptMemberVisitor(IMemberVisitor visitor, DB_Type type, DB_Member member)
        {
            IMemberVisitor memberVisitor = visitor;

            if (memberVisitor != null)
            {
                if (member.member_type == (int)MemberTypes.Method)
                {
                    EnterMethod(member);
                    memberVisitor.VisitMember(type, member);
                    LeaveMethod();
                }
                else
                {
                    memberVisitor.VisitMember(type, member);
                }
            }
        }
Esempio n. 4
0
        private (Type ReturnType, Expression Body) CreateLambdaBody(ParameterExpression p, List <ValuePath> pathInfos, IMemberVisitor memberProvider)
        {
            IMemberVisitor currentMemberProvider = memberProvider;
            Type           currentExpressionType = currentMemberProvider.CurrentType;
            Expression     currentExpression     = p;

            foreach (var pathInfo in pathInfos.TrimNotNull())
            {
                if (pathInfo.IsFunction)
                {
                    var functionResult = IFilterFunction.ExecuteFunction(pathInfo.Name, pathInfo.FunctionArgs, new ExecuteContext
                    {
                        CurrentExpression = currentExpression,
                        MemberVisitor     = currentMemberProvider,
                        CurrentType       = currentExpressionType,
                    });
                    currentExpressionType = functionResult.LambdaValueType;
                    currentExpression     = currentExpression.Connect(functionResult.LambdaExpression);
                    currentMemberProvider = functionResult.MemberProvider;
                }
                else
                {
                    var memberInfo = currentMemberProvider.GetSubMemberInfo(pathInfo.Name);

                    if (memberInfo == null)
                    {
                        throw ExpressionErrors.MemberNotFound(pathInfo.Name);
                    }
                    else
                    {
                        currentExpressionType = memberInfo.ExpressionValueType;
                        currentExpression     = currentExpression.Connect(memberInfo.SelectExpression);
                        currentMemberProvider = memberInfo.SubProvider;
                    }
                }
            }
            return(currentExpressionType, currentExpression);
        }
Esempio n. 5
0
 public PathValueLambdaProvider(Type sourceType, List <ValuePath> paths, IMemberVisitor memberVisitor)
 {
     this.SourceType    = sourceType;
     this.paths         = paths;
     this.memberVisitor = memberVisitor ?? throw new ArgumentNullException(nameof(memberVisitor));
 }