Exemplo n.º 1
0
        protected override Node VisitMethodCall(MethodCallExpression m)
        {
            SqlLikeType type;

            if (Enum.TryParse(m.Method.Name, true, out type))
            {
                Expression objExp = m.Object;
                var        args   = m.Arguments;
                if (objExp != null)
                {
                    var member     = m.Object as MemberExpression;
                    var fieldValue = ExpressionHelper.GetExpressionValue(args.FirstOrDefault());
                    var node       = new MemberNode(member);
                    return(new LikeNode(type, node, fieldValue));
                }
                else
                {
                    if (args != null && args.Count > 1)
                    {
                        var values = ExpressionHelper.GetExpressionValue(args.FirstOrDefault());
                        var member = args[1] as MemberExpression;
                        var node   = new MemberNode(member);
                        return(new InNode(node, values));
                    }
                }
                throw new NotSupportedException("不能解析该MethodCall_Lambda表达式");
            }
            else
            {
                var handler = MethodConfig.GetMethodHandler(m.Method.DeclaringType, m.Method.Name);
                if (handler != null)
                {
                    return(handler(m.Object, m.Arguments, m));
                }
                else
                {
                    var value = ExpressionHelper.GetMethodCallValue(m);
                    return(new ValueNode(value));
                }
            }
        }