/// <summary>
        /// Where parameter operand creation is called by DynamicQuery.
        /// See <see cref="esComparisonOperand"/> Enumeration.
        /// </summary>
        /// <param name="op">E.g., esComparisonOperand.Between</param>
        /// <param name="value1">The first value for this comparison</param>
        /// <param name="value2">The second value for this comparison</param>
        /// <returns>The esComparison returned to DynamicQuery</returns>
        public esComparison OP(esComparisonOperand op, object value1, object value2)
        {
            switch (op)
            {
                case esComparisonOperand.IsNull:
                case esComparisonOperand.IsNotNull:
                    return CreateComparisonParameter(op);

                case esComparisonOperand.Equal:
                case esComparisonOperand.NotEqual:
                case esComparisonOperand.GreaterThan:
                case esComparisonOperand.GreaterThanOrEqual:
                case esComparisonOperand.LessThan:
                case esComparisonOperand.LessThanOrEqual:
                case esComparisonOperand.In:
                case esComparisonOperand.NotIn:
                case esComparisonOperand.Contains:
                    return CreateComparisonParameter(op, value1);

                case esComparisonOperand.Like:
                    return this.Like(value1, Convert.ToChar(value2));

                case esComparisonOperand.NotLike:
                    return this.NotLike(value1, Convert.ToChar(value2));

                case esComparisonOperand.Between:
                    return this.Between(value1, value2);

                default:
                    throw new InvalidOperationException("Invalid Operand");
            }
        }
        /// <summary>
        /// Where parameter operand creation is called by DynamicQuery.
        /// See <see cref="esComparisonOperand"/> Enumeration.
        /// </summary>
        /// <param name="op">E.g., esComparisonOperand.IsNotNull</param>
        /// <param name="value">The value for this comparison</param>
        /// <returns>The esComparison returned to DynamicQuery</returns>
        public esComparison OP(esComparisonOperand op, object value)
        {
            switch (op)
            {
                case esComparisonOperand.IsNull:
                case esComparisonOperand.IsNotNull:
                    return CreateComparisonParameter(op);

                case esComparisonOperand.Equal:
                case esComparisonOperand.NotEqual:
                case esComparisonOperand.GreaterThan:
                case esComparisonOperand.GreaterThanOrEqual:
                case esComparisonOperand.LessThan:
                case esComparisonOperand.LessThanOrEqual:
                case esComparisonOperand.Like:
                case esComparisonOperand.In:
                case esComparisonOperand.NotIn:
                case esComparisonOperand.NotLike:
                case esComparisonOperand.Contains:
                    return CreateComparisonParameter(op, value);

                case esComparisonOperand.Between:
                    throw new InvalidOperationException("Between requires two parameters");

                default:
                    throw new InvalidOperationException("Invalid Operand");
            }
        }
        private esComparison CreateComparisonParameter(esComparisonOperand operand)
        {
            esComparison comparison = new esComparison(this.query);

            comparison.Operand = operand;

            if (this.HasExpression)
            {
                comparison.data.Expression = this.Expression;
            }

            comparison.data.Column = this.Column;
            comparison.SubOperators = this.SubOperators;

            return comparison;
        }
        /// <summary>
        /// Where parameter operand creation is called by DynamicQuery.
        /// See <see cref="esComparisonOperand"/> Enumeration.
        /// </summary>
        /// <param name="op">E.g., esComparisonOperand.IsNotNull</param>
        /// <returns>The esComparison returned to DynamicQuery</returns>
        public esComparison OP(esComparisonOperand op)
        {
            switch (op)
            {
                case esComparisonOperand.IsNotNull:
                case esComparisonOperand.IsNull:
                    return CreateComparisonParameter(op);

                default:
                    throw new InvalidOperationException("Operand requires at least one value");
            }
        }
        private esComparison CreateComparisonParameter(esComparisonOperand operand, object value)
        {
            esComparison comparison = null;

            esQueryItem qi = value as esQueryItem;
            if (Object.Equals(qi, null))
            {
                comparison = new esComparison(this.query);
                comparison.Operand = operand;

                if (this.HasExpression)
                {
                    comparison.data.Expression = this.Expression;
                }

                comparison.data.Column = this.Column;
                comparison.data.Value = value;
                comparison.SubOperators = this.SubOperators;
            }
            else
            {
                comparison = new esComparison(this.query);
                comparison.Operand = operand;
                comparison.data.Column = this.Column;
                comparison.data.ComparisonColumn = qi.Column;
                comparison.SubOperators = qi.SubOperators;
            }

            return comparison;
        }