protected virtual string CreateBetweenConditionString(string fieldName, IBetweenValue value) { if (!(value.FirstValue is INullValue || value.SecondValue is INullValue)) { return(string.Concat("(", fieldName, OperatorString(RelationalOperators.Between), ValueConverter.ConvertValueToString(value), ")")); } if (value.FirstValue is INullValue && value.SecondValue is INullValue) { return(null); } string valueString = null; string operatorString = null; if (value.FirstValue is INullValue) { valueString = ValueConverter.ConvertValueToString(value.SecondValue); operatorString = OperatorString(RelationalOperators.Equal | RelationalOperators.LessThan); } else { valueString = ValueConverter.ConvertValueToString(value.FirstValue); operatorString = OperatorString(RelationalOperators.Equal | RelationalOperators.GreaterThan); } return(string.Concat(ConditionStringItemPrefix, fieldName, operatorString, valueString, ConditionStringItemPostfix)); }
protected virtual string ConvertValueToString(IBetweenValue value) { return(string.Concat(ConvertValueToString(value.FirstValue), " And ", ConvertValueToString(value.SecondValue))); }
private bool ContainsIgnoreValue(IBetweenValue value, object ignoreValue) { return(ContainsIgnoreValue(value.FirstValue, ignoreValue) || ContainsIgnoreValue(value.SecondValue, ignoreValue)); }
protected virtual string CreateBetweenConditionString(IField field, RelationalOperators op, IBetweenValue value) { if (op == RelationalOperators.Between) { var fieldName = NameConverter.GenerateFieldString(field); return(CreateBetweenConditionString(fieldName, value)); } op = (op ^ RelationalOperators.Between); if (op == RelationalOperators.AddWildcardSuffix) { string condString = string.Empty; if (!(value.FirstValue is INullValue)) { condString = CreateConditionString(field, RelationalOperators.Equal | RelationalOperators.GreaterThan, value.FirstValue); } if (value.SecondValue is INullValue) { return(condString); } if (field.DataType == FieldDataType.DateTime) { DateTime d; if (value.SecondValue is IDateTimeValue) { d = ((IDateTimeValue)value.SecondValue).Value; } else { throw new InvalidCastException("IDateTimeValue required"); } condString = string.Concat("(", condString, " And ", CreateConditionString(field, RelationalOperators.LessThan, d.Date.AddDays(1)), ")"); return(condString); } if (field.DataType == FieldDataType.Text) { string s; if (value.SecondValue is ITextValue) { s = ((ITextValue)value.SecondValue).Value; } else { throw new InvalidCastException("ITextValue required"); } if (!string.IsNullOrEmpty(s)) { s = s.Substring(0, s.Length - 1) + (char)(s[s.Length - 1] + 1); } condString = string.Concat("(", condString, " And ", CreateConditionString(field, RelationalOperators.LessThan, s), ")"); return(condString); } } throw new NotSupportedRelationalOperatorException(op); }
private IConditionGroup AddBetweenCondition(IField field, RelationalOperators relationalOperator, IBetweenValue values, object ignoreValue) { if (ContainsIgnoreValue(values.FirstValue, ignoreValue) && ContainsIgnoreValue(values.SecondValue, ignoreValue)) { return(this); } Add(new FieldCondition(field, relationalOperator, values)); return(this); }