private static bool PropertyCompare(string[] conditionTable, ConditionData compareObj)
    {
        Type _type = compareObj.GetType();

        FieldInfo[] _fieldInfoArr = _type.GetFields();

        List <bool> orList  = new List <bool>();
        List <bool> andList = new List <bool>();

        for (int i = 0; i < conditionTable.Length; i++)
        {
            if (conditionTable[i] == CHAR_TAG_IGNORE)
            {
                continue;
            }

            object           _compareParam = _fieldInfoArr[i].GetValue(compareObj);
            SubCompareResult _compare      = SpecificCompare(conditionTable[i], _compareParam, _fieldInfoArr[i]);

            switch (_compare.logicTag)
            {
            case LogicalOperator.And:
                andList.Add(_compare.result);
                break;

            case LogicalOperator.Or:
                orList.Add(_compare.result);
                break;
            }
        }

        if ((orList == null || orList.Count <= 0) && (andList == null || andList.Count <= 0))
        {
            return(false);
        }

        for (int i = 0; i < andList.Count; i++)
        {
            if (!andList[i])
            {
                return(false);
            }
        }

        bool _or = false;

        for (int i = 0; i < orList.Count; i++)
        {
            if (orList[i])
            {
                _or = true;
            }
        }

        return(_or);
    }
    private static SubCompareResult SpecificCompare(string tableParam, object compareParam, FieldInfo fieldInfo)
    {
        SubCompareResult _resultInfo = new SubCompareResult();
        string           paramName   = fieldInfo.Name;
        bool             _result     = false;

        if (paramName.Contains(COMPARE_TAG_RANGE)) //在數值範圍內
        {
            string[] _range = tableParam.Split(SPLIT_TAG_RANGE);
            int      _min   = (int)ConvertData(_range[0], typeof(int));
            int      _max   = (int)ConvertData(_range[1], typeof(int));
            int      _value = (int)compareParam;

            _result = (_min <= _value) && (_value <= _max);
        }
        else if (paramName.Contains(COMPARE_TAG_GREATERTHEN)) //大於指定數值
        {
            int _param = (int)ConvertData(tableParam, typeof(int));
            int _value = (int)compareParam;

            _result = (_value >= _param);
        }
        else if (paramName.Contains(COMPARE_TAG_SMALLERTHAN)) //小於指定數值
        {
            int _param = (int)ConvertData(tableParam, typeof(int));
            int _value = (int)compareParam;

            _result = (_value <= _param);
        }
        else if (paramName.Contains(COMPARE_TAG_CONTAIN)) //包含指定值
        {
            IList _param = (IList)ConvertData(tableParam, fieldInfo.FieldType, true);

            _result = _param.Contains(compareParam);
        }
        else //未指定的狀況, 檢查是否相等
        {
            object _param = ConvertData(tableParam, fieldInfo.FieldType);

            _result = _param.Equals(compareParam);
        }

        _resultInfo.result = _result;

        if (paramName.Contains(LOGICAL_TAG_AND)) //加入"AND"邏輯判斷清單
        {
            _resultInfo.logicTag = LogicalOperator.And;
        }
        else //加入"OR"邏輯判斷清單
        {
            _resultInfo.logicTag = LogicalOperator.Or;
        }

        return(_resultInfo);
    }