/// <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); }