private static DataObject Evaluate(DataObject left, SqlExpressionType binaryType, DataObject right, EvaluateContext context) { if (binaryType.IsAll()) { return(left.Any(binaryType.SubQueryPlainType(), right, context)); } if (binaryType.IsAny()) { return(left.All(binaryType.SubQueryPlainType(), right, context)); } switch (binaryType) { case SqlExpressionType.Add: return(left.Add(right)); case SqlExpressionType.Subtract: return(left.Subtract(right)); case SqlExpressionType.Multiply: return(left.Multiply(right)); case SqlExpressionType.Divide: return(left.Divide(right)); case SqlExpressionType.Modulo: return(left.Modulus(right)); case SqlExpressionType.GreaterThan: return(left.IsGreaterThan(right)); case SqlExpressionType.GreaterOrEqualThan: return(left.IsGreterOrEqualThan(right)); case SqlExpressionType.SmallerThan: return(left.IsSmallerThan(right)); case SqlExpressionType.SmallerOrEqualThan: return(left.IsSmallerOrEqualThan(right)); case SqlExpressionType.Equal: return(left.IsEqualTo(right)); case SqlExpressionType.NotEqual: return(left.IsNotEqualTo(right)); case SqlExpressionType.Is: return(left.Is(right)); case SqlExpressionType.IsNot: return(left.IsNot(right)); case SqlExpressionType.Like: return(left.IsLike(right)); case SqlExpressionType.NotLike: return(left.IsNotLike(right)); case SqlExpressionType.And: return(left.And(right)); case SqlExpressionType.Or: return(left.Or(right)); case SqlExpressionType.XOr: return(left.XOr(right)); // TODO: ANY and ALL default: throw new ExpressionEvaluateException(String.Format("The type {0} is not a binary expression or is not supported.", binaryType)); } }