private static object VisitBinary(BinaryExpression b, SQLExpressionVisitorContenxt context) { object left, right; bool rightIsNull; string operand = BindOperant(b.NodeType); //sep= " " ?? if (operand == "AND" || operand == "OR") { if (b.Left is MemberExpression m && m.Expression != null && m.Expression.NodeType == ExpressionType.Parameter) { left = new PartialSqlString(string.Format(GlobalSettings.Culture, "{0}={1}", VisitMemberAccess(m, context), context.DatabaesEngine.GetDbValueStatement(true, needQuoted: true))); } else { left = Visit(b.Left, context); } m = b.Right as MemberExpression; if (m != null && m.Expression != null && m.Expression.NodeType == ExpressionType.Parameter) { right = new PartialSqlString(string.Format(GlobalSettings.Culture, "{0}={1}", VisitMemberAccess(m, context), context.DatabaesEngine.GetDbValueStatement(true, needQuoted: true))); } else { right = Visit(b.Right, context); } if (left as PartialSqlString == null && right as PartialSqlString == null) { object result = Expression.Lambda(b).Compile().DynamicInvoke(); return(new PartialSqlString(context.DatabaesEngine.GetDbValueStatement(result, needQuoted: true))); } if (left as PartialSqlString == null) { left = ((bool)left) ? GetTrueExpression(context) : GetFalseExpression(context); } if (right as PartialSqlString == null) { right = ((bool)right) ? GetTrueExpression(context) : GetFalseExpression(context); } }
private static object VisitBinary(BinaryExpression b, SQLExpressionVisitorContenxt context) { object left; object right; bool rightIsNull; string operand = BindOperant(b.NodeType); if (operand == "AND" || operand == "OR") { if (b.Left is MemberExpression m && m.Expression != null && m.Expression.NodeType == ExpressionType.Parameter) { left = new PartialSqlString(string.Format(GlobalSettings.Culture, "{0}={1}", VisitMemberAccess(m, context), context.DatabaesEngine.GetDbValueStatement(true, needQuoted: true))); } else { left = Visit(b.Left, context); } if (b.Right is MemberExpression mm && mm.Expression != null && mm.Expression.NodeType == ExpressionType.Parameter) { right = new PartialSqlString(string.Format(GlobalSettings.Culture, "{0}={1}", VisitMemberAccess(mm, context), context.DatabaesEngine.GetDbValueStatement(true, needQuoted: true))); }