コード例 #1
0
        /// <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);
            }
        }