/// <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))); }
public static Not Not(this ILogicalOperator parent) { return(new Not(parent)); }
public static GroupStart StartGroup(this ILogicalOperator parent) { return(new GroupStart(parent)); }
public static AxiomTokenizer AddAxiom(this ILogicalOperator parent, Axiom axiom) { return(new AxiomTokenizer(parent, axiom)); }