public bool EvaluateFieldExpression(FilterExpField criteria, object lVal, object rVal, FieldType rFieldType = FieldType.None) { var field = criteria.Field; object[] inSet = null; if (lVal is DateTime || rVal is DateTime || (field != null && field.BaseType == TypeCode.DateTime)) { //return DateCompare(criteria, lVal, rVal, rFieldType); } if (lVal is Boolean && rVal is string) { rVal = (bool)(rVal.ToString() == "1" || rVal.ToString().ToLower() == "true"); } if (criteria.Op == FilterOperationType.IsSpecified || criteria.Op == FilterOperationType.NotSpecified) { //return GetSpecifiedNotSpecifiedResult(criteria.Operation, field, lVal); } int compResult = 0; if (rVal != null && criteria.Op == FilterOperationType.In || criteria.Op == FilterOperationType.NotIn) { inSet = FilterExpField.GetValueSet(rVal.ToString(), lVal.GetType()); } else { rVal = Convert.ChangeType(rVal, lVal.GetType()); if (rVal is string) { compResult = ((IComparable)lVal.ToString().ToLower()).CompareTo(rVal.ToString().ToLower()); } else { compResult = ((IComparable)lVal).CompareTo(rVal); } } bool result = false; switch (criteria.Op) { case FilterOperationType.AnyOf: case FilterOperationType.In: result = IsInSet(lVal, inSet); break; case FilterOperationType.NotIn: result = IsNotInSet(lVal, inSet); break; case FilterOperationType.Equal: result = compResult == 0; break; case FilterOperationType.GreaterThan: result = compResult > 0; break; case FilterOperationType.GreaterThanEqual: result = compResult >= 0; break; case FilterOperationType.LessThan: result = compResult < 0; break; case FilterOperationType.LessThanEqual: result = compResult <= 0; break; case FilterOperationType.NotEqual: result = compResult != 0; break; case FilterOperationType.StartWith: result = StartWith(lVal, rVal); break; case FilterOperationType.Like: result = IsLike(lVal, rVal); break; } return(result); }