コード例 #1
0
ファイル: Filter.cs プロジェクト: kjb7749/testImport
        // Apply the filters to a row to determine if row is valid
        internal bool Apply(Report rpt, Row datarow)
        {
            object   left  = _FilterExpression.Evaluate(rpt, datarow);
            TypeCode tc    = _FilterExpression.GetTypeCode();
            object   right = ((FilterValue)(_FilterValues.Items[0])).Expression.Evaluate(rpt, datarow);

            switch (_FilterOperator)
            {
            case FilterOperatorEnum.Equal:
                return(ApplyCompare(tc, left, right) == 0? true: false);

            case FilterOperatorEnum.Like:                       // TODO - this is really regex (not like)
                if (left == null || right == null)
                {
                    return(false);
                }
                string s1 = Convert.ToString(left);
                string s2 = Convert.ToString(right);
                return(Regex.IsMatch(s1, s2));

            case FilterOperatorEnum.NotEqual:
                return(ApplyCompare(tc, left, right) == 0? false: true);

            case FilterOperatorEnum.GreaterThan:
                return(ApplyCompare(tc, left, right) > 0? true: false);

            case FilterOperatorEnum.GreaterThanOrEqual:
                return(ApplyCompare(tc, left, right) >= 0? true: false);

            case FilterOperatorEnum.LessThan:
                return(ApplyCompare(tc, left, right) < 0? true: false);

            case FilterOperatorEnum.LessThanOrEqual:
                return(ApplyCompare(tc, left, right) <= 0? true: false);

            case FilterOperatorEnum.TopN:
            case FilterOperatorEnum.BottomN:
            case FilterOperatorEnum.TopPercent:
            case FilterOperatorEnum.BottomPercent:
                return(true);                                   // This is handled elsewhere

            case FilterOperatorEnum.In:
                foreach (FilterValue fv in _FilterValues.Items)
                {
                    right = fv.Expression.Evaluate(rpt, datarow);
                    if (right is ArrayList) // this can only happen with MultiValue parameters
                    {                       // check each object in the array
                        foreach (object v in right as ArrayList)
                        {
                            if (ApplyCompare(tc, left, v) == 0)
                            {
                                return(true);
                            }
                        }
                    }
                    else if (ApplyCompare(tc, left, right) == 0)
                    {
                        return(true);
                    }
                }
                return(false);

            case FilterOperatorEnum.Between:
                if (ApplyCompare(tc, left, right) < 0)
                {
                    return(false);
                }
                right = ((FilterValue)(_FilterValues.Items[1])).Expression.Evaluate(rpt, datarow);
                return(ApplyCompare(tc, left, right) <= 0? true: false);

            default:
                return(true);
            }
        }