Ejemplo n.º 1
0
        /// <summary>
        /// Compile a binary expression to an <see cref="ILogicalOperator"/>.
        /// </summary>
        /// <param name="expression">The expression.</param>
        /// <returns>The logical operator.</returns>
        public static ILogicalOperator ParseLogicalOperator(BinaryExpression expression)
        {
            ILogicalOperator        logicalOperator = null;
            Func <ILogicalOperator> opDel           = null;

            switch (expression.NodeType)
            {
            case ExpressionType.And:
            case ExpressionType.AndAlso:
                if (expression.Left.NodeType != ExpressionType.And && expression.Left.NodeType != ExpressionType.AndAlso)
                {
                    opDel = () => SqlBuilder.Instance.And;
                }
                break;

            case ExpressionType.Or:
            case ExpressionType.OrElse:
                if (expression.Left.NodeType != ExpressionType.Or && expression.Left.NodeType != ExpressionType.OrElse)
                {
                    opDel = () => SqlBuilder.Instance.Or;
                }
                break;

            default:
                throw new ArgumentException("Invalid expression.");
            }

            if (opDel != null)
            {
                logicalOperator = opDel();
                logicalOperator.Add(ParseBoolOperator(expression.Left));
            }
            else
            {
                logicalOperator = (ILogicalOperator)ParseBoolOperator(expression.Left);
            }

            return(logicalOperator.Add(ParseBoolOperator(expression.Right)));
        }
Ejemplo n.º 2
0
 public static Not Not(this ILogicalOperator parent)
 {
     return(new Not(parent));
 }
Ejemplo n.º 3
0
 public static GroupStart StartGroup(this ILogicalOperator parent)
 {
     return(new GroupStart(parent));
 }
Ejemplo n.º 4
0
 public static AxiomTokenizer AddAxiom(this ILogicalOperator parent, Axiom axiom)
 {
     return(new AxiomTokenizer(parent, axiom));
 }