/// <summary>
        /// 是否非内置逻辑值简单表达式(不需要括号)
        /// </summary>
        /// <param name="expression"></param>
        /// <returns></returns>
        internal static bool IsSimpleNotLogic(this Expression expression)
        {
            switch (expression.NodeType)
            {
            case ExpressionType.Constant:
            case ExpressionType.MemberAccess:
            case ExpressionType.Convert:
            case ExpressionType.ConvertChecked:
                return(true);

            case ExpressionType.Call:
                MethodCallExpression methodCallExpression = new Sql.UnionType {
                    Value = expression
                }.MethodCallExpression;
                System.Reflection.MethodInfo method = methodCallExpression.Method;
                if (method.ReflectedType == typeof(Sql.ExpressionCall))
                {
                    switch (method.Name)
                    {
                    case "In":
                    case "NotIn":
                    case "Like":
                        return(false);
                    }
                }
                else if (AutoCSer.Sql.MsSql.ExpressionConverter.IsStringContains(method))
                {
                    return(false);
                }
                return(true);
            }
            return(false);
        }
        /// <summary>
        /// 获取常量
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        private static bool tryGetConstant(this Expression expression, ref object value)
        {
            switch (expression.NodeType)
            {
            case ExpressionType.Constant: value = new Sql.UnionType {
                    Value = expression
            }.ConstantExpression.Value; return(true);

            case ExpressionType.MemberAccess: return(TryGetConstant(new Sql.UnionType {
                    Value = expression
                }.MemberExpression, ref value));

            case ExpressionType.Call: value = new Sql.UnionType {
                    Value = expression
            }.MethodCallExpression.GetConstant(); return(true);

            case ExpressionType.Convert:
            case ExpressionType.ConvertChecked:
                return(TryGetConstantConvert(new Sql.UnionType {
                    Value = expression
                }.UnaryExpression, ref value));
            }
            return(false);
        }