private static System.Linq.Expressions.ConstantExpression InvokeValue(IAccessibleValueExpression AccessibleValueExpression)
        {
            System.Reflection.MemberInfo mi = AccessibleValueExpression.MemberInfo;

            System.Reflection.BindingFlags bindingFlag = GetMemberBindingFlagByMemberInfoType(mi.MemberType);

            object obj = null;

            if (AccessibleValueExpression.Expression != null)
            {
                System.Linq.Expressions.ConstantExpression ce = (System.Linq.Expressions.ConstantExpression)AccessibleValueExpression.Expression;

                obj = ce.Value.GetType().InvokeMember(mi.Name, bindingFlag, null, ce.Value, AccessibleValueExpression.Args);
            }
            else
            {
                //static member
                obj = mi.ReflectedType.InvokeMember(mi.Name, bindingFlag, null, null, AccessibleValueExpression.Args);
            }

            Type objType = obj.GetType();

            //Expression.MethodCall won't accept parameter if it diiffrent from its parameter type
            if (mi.ToString().Contains("System.Object"))
            {
                objType = typeof(object);
            }

            return System.Linq.Expressions.ConstantExpression.Constant(obj, objType); 
        }
        private static System.Linq.Expressions.ConstantExpression TryInvokeValue(IAccessibleValueExpression AccessibleValueExpression)
        {
            try
            {
                return InvokeValue(AccessibleValueExpression);
            }
            catch (System.Exception)
            {
                return null;
            }

        }