/// <summary> /// Clause : COL1 = 10 AND COL2.Contains('A') /// COL1 = 10 - Left clause(stroke) /// COL2.Contains('A') - Right clause (stroke) /// ------------------------------------------- /// Clause : (COL1 = 10 OR COL2 > 100) AND COL3.Contains('A') /// (COL1 = 10 OR COL2 > 100) - Left clause /// COL3.Contains('A') - Right clause (stroke) /// </summary> /// <param name="Expression"></param> private void SetCurrentSqlClause(System.Linq.Expressions.Expression Expression) { if (_sqlClause == null) { _currentSqlClause = _sqlClause = new SqlClause(Expression); } if (_currentSqlClause.expression != Expression) { if (_exprClause.ContainsKey(Expression)) { _currentSqlClause = _exprClause[Expression]; } else { if (!_currentSqlClause.IsStroke) { _exprClause.Add(_currentSqlClause.sqlLeft.expression, _currentSqlClause.sqlLeft); _exprClause.Add(_currentSqlClause.sqlRight.expression, _currentSqlClause.sqlRight); _currentSqlClause = _exprClause[Expression]; } } } }
internal SqlClause(SqlClause Parent, System.Linq.Expressions.Expression Expression) { parent = Parent; expression = Expression; if (DataAvail.Linq.Condition.IsBinaryJoiner(expression)) { sqlLeft = new SqlClause(this, ((System.Linq.Expressions.BinaryExpression)Expression).Left); sqlRight = new SqlClause(this, ((System.Linq.Expressions.BinaryExpression)Expression).Right); sqlJoiner = GetStorkeOperand(expression.NodeType); } else { if (Expression is System.Linq.Expressions.BinaryExpression) { sqlStroke = new SqlStroke((System.Linq.Expressions.BinaryExpression)Expression); } else if (Expression is System.Linq.Expressions.MethodCallExpression && ((System.Linq.Expressions.MethodCallExpression)Expression).Arguments.Count == 1) { sqlStroke = new SqlStrokeMethodCall((System.Linq.Expressions.MethodCallExpression)Expression); } else { throw new SqlVisitorException("Sql stroke supports only Binary and MethodCall expressions which contains single argument"); } } }