/// <summary> /// Checks if an entity passes the filter. /// </summary> /// <param name="entity">The entity to check.</param> /// <returns>True if the entity passes the filter.</returns> public bool FilterPass(object entity) { object value = _Aspect.GetMember(_Ordinal).GetValue(entity); switch (this._Comparison) { case FilterComparison.EqualTo: return(value == null ? _Value == null : value.Equals(_Value)); case FilterComparison.NotEqualTo: return(value == null ? _Value != null : !value.Equals(_Value)); case FilterComparison.GreaterOrEqual: return(value == null || _Value == null ? false : ((IComparable)value).CompareTo(_Value) >= 0); case FilterComparison.GreaterThan: return(value == null || _Value == null ? false : ((IComparable)value).CompareTo(_Value) > 0); case FilterComparison.LowerOrEqual: return(value == null || _Value == null ? false : ((IComparable)value).CompareTo(_Value) <= 0); case FilterComparison.LowerThan: return(value == null || _Value == null ? false : ((IComparable)value).CompareTo(_Value) < 0); case FilterComparison.Like: return(value == null || _Value == null ? false : value.ToString().IndexOf(_Value.ToString(), StringComparison.OrdinalIgnoreCase) >= 0); case FilterComparison.NotLike: return(value == null || _Value == null ? true : value.ToString().IndexOf(_Value.ToString(), StringComparison.OrdinalIgnoreCase) < 0); case FilterComparison.InCollection: if (value == null || _Value == null) { return(false); } else { foreach (object o in ((System.Collections.IEnumerable)_Value)) { if (_Value.Equals(o)) { return(true); } } return(false); } case FilterComparison.NotInCollection: if (value == null || _Value == null) { return(true); } else { foreach (object o in ((System.Collections.IEnumerable)_Value)) { if (_Value.Equals(o)) { return(false); } } return(true); } default: throw new NotImplementedException("Unknown comparison " + _Comparison); } }