//private void ProcessCmd(DbCommand cmd)
        //{
        //    foreach (string s in m_funcParams)
        //    {
        //        if (!cmd.Parameters.Contains(s))
        //        {
        //            cmd.CommandText = cmd.CommandText.Replace(s, "default");
        //        }
        //        else
        //        {
        //            // remove like %
        //            string likeString = cmd.Parameters[s].Value as string;
        //            if (!string.IsNullOrEmpty(likeString))
        //            {
        //                if (likeString[0] == '%' && likeString[likeString.Length - 1] == '%')
        //                {
        //                    cmd.Parameters[s].Value = likeString.Substring(1, likeString.Length - 2);
        //                }
        //            }

        //            // remove where clause
        //            int idx = cmd.CommandText.IndexOf("WHERE");
        //            idx = cmd.CommandText.IndexOf(s, idx);

        //            int idx2 = idx;

        //            // jump to "=, >="
        //            idx2--;
        //            while (cmd.CommandText[idx2] == ' ')
        //                idx2--;

        //            // jump to space
        //            idx2--;
        //            while (cmd.CommandText[idx2] != ' ')
        //                idx2--;

        //            // jump to propertyName
        //            idx2--;
        //            while (cmd.CommandText[idx2] == ' ')
        //                idx2--;

        //            // jump to space
        //            idx2--;
        //            while (cmd.CommandText[idx2] != ' ')
        //                idx2--;

        //            cmd.CommandText = cmd.CommandText.Replace(cmd.CommandText.Substring(idx2 + 1, idx - idx2 - 1 + s.Length), "1 = 1");
        //        }
        //    }
        //}

        private ISearchExpression RemoveFunctionParamSearchExpression(ISearchExpression se, Dictionary <string, object> deletedParam)
        {
            if (se == null)
            {
                return(null);
            }
            if (se is LogicalExpression)
            {
                LogicalExpression le = se as LogicalExpression;
                ISearchExpression ls = RemoveFunctionParamSearchExpression(le.LeftHandSide, deletedParam);
                ISearchExpression rs = RemoveFunctionParamSearchExpression(le.RightHandSide, deletedParam);
                switch (le.LogicOperator)
                {
                case LogicalOperator.And:
                    return(SearchExpression.And(ls, rs));

                case LogicalOperator.Or:
                    return(SearchExpression.Or(ls, rs));

                case LogicalOperator.Not:
                    return(SearchExpression.Not(ls));

                default:
                    throw new NotSupportedException("Not Supported LogicalOperator!");
                }
            }
            else if (se is SimpleExpression)
            {
                SimpleExpression cse = se as SimpleExpression;

                string paramName = SearchManager.CreateParamName(cse, null);
                if (Array.IndexOf(m_funcParams, paramName) != -1)
                {
                    deletedParam[paramName] = cse.Values;
                    return(null);
                }
                else
                {
                    return(cse);
                }
            }
            else
            {
                return(se);
            }
        }