Пример #1
0
        /// <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];
                    }
                }
            }
        }
Пример #2
0
        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");
                }
            }
        }