/// <summary>
        /// 将And和Or组里面的最基本条件转化为一个IMongoQuery
        /// </summary>
        /// <param name="oprGrp"></param>
        /// <param name="strOPR"></param>
        /// <returns></returns>
        private static IMongoQuery GetQuery(DataFilter.QueryConditionInputItem item)
        {
            IMongoQuery query;
            BsonValue   queryvalue = item.Value.GetBsonValue();

            switch (item.Compare)
            {
            case DataFilter.CompareEnum.EQ:
                query = Query.EQ(item.ColName, queryvalue);
                break;

            case DataFilter.CompareEnum.GT:
                query = Query.GT(item.ColName, queryvalue);
                break;

            case DataFilter.CompareEnum.GTE:
                query = Query.GTE(item.ColName, queryvalue);
                break;

            case DataFilter.CompareEnum.LT:
                query = Query.LT(item.ColName, queryvalue);
                break;

            case DataFilter.CompareEnum.LTE:
                query = Query.LTE(item.ColName, queryvalue);
                break;

            case DataFilter.CompareEnum.NE:
                query = Query.NE(item.ColName, queryvalue);
                break;

            default:
                query = Query.EQ(item.ColName, queryvalue);
                break;
            }
            return(query);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="Sql"></param>
        /// <returns></returns>
        private static List<DataFilter.QueryConditionInputItem> SetQueryCondition(String SqlContent, List<String> ColumnNameLst)
        {
            List<DataFilter.QueryConditionInputItem> Conditionlst = new List<DataFilter.QueryConditionInputItem>();
            // (a=1 or b="A") AND c="3" => ( a = 1 or b = "A" ) and c = "3"
            //1. 除了引号里面的文字,全部小写
            String[] KeyWord = new String[] { "(", ")", "=", "or", "and", ">", ">=", "<", "<=", "<>" };
            foreach (String Keyitem in KeyWord)
            {
                SqlContent = SqlContent.Replace(Keyitem, " " + Keyitem + " ");
            }
            while (SqlContent.Contains("  "))
            {
                SqlContent = SqlContent.Replace("  ", " ");
            }
            SqlContent = SqlContent.Trim();
            //从左到右  ( a = 1 or
            //           b = "A" ) and
            //           c = "3"
            String[] Token = SqlContent.Split(" ".ToCharArray());
            DataFilter.QueryConditionInputItem mQueryConditionInputItem = new DataFilter.QueryConditionInputItem();
            mQueryConditionInputItem.StartMark = String.Empty;
            mQueryConditionInputItem.EndMark = String.Empty;

            for (int i = 0; i < Token.Length; i++)
            {
                String strToken = Token[i].Replace("&nbsp;", " ");
                switch (strToken)
                {
                    case "(":
                        mQueryConditionInputItem.StartMark = "(";
                        break;
                    case "=":
                        mQueryConditionInputItem.Comp = DataFilter.CompareEnum.EQ;
                        break;
                    case ">":
                        mQueryConditionInputItem.Comp = DataFilter.CompareEnum.GT;
                        break;
                    case "<":
                        mQueryConditionInputItem.Comp = DataFilter.CompareEnum.LT;
                        break;
                    case ">=":
                        mQueryConditionInputItem.Comp = DataFilter.CompareEnum.GTE;
                        break;
                    case "<=":
                        mQueryConditionInputItem.Comp = DataFilter.CompareEnum.LTE;
                        break;
                    case "<>":
                        mQueryConditionInputItem.Comp = DataFilter.CompareEnum.NE;
                        break;
                    case "or":
                        mQueryConditionInputItem.EndMark = EndMark_OR;
                        Conditionlst.Add(mQueryConditionInputItem);
                        mQueryConditionInputItem = new DataFilter.QueryConditionInputItem();
                        mQueryConditionInputItem.StartMark = String.Empty;
                        mQueryConditionInputItem.EndMark = String.Empty;

                        break;
                    case "and":
                        mQueryConditionInputItem.EndMark = EndMark_AND;
                        Conditionlst.Add(mQueryConditionInputItem);
                        mQueryConditionInputItem = new DataFilter.QueryConditionInputItem();
                        mQueryConditionInputItem.StartMark = String.Empty;
                        mQueryConditionInputItem.EndMark = String.Empty;

                        break;
                    case ")":
                        mQueryConditionInputItem.EndMark = ")";

                        if (i == Token.Length - 1)
                        {
                            mQueryConditionInputItem.EndMark = EndMark_T;
                        }
                        else {
                            if (Token[i + 1] == "or")
                            {
                                mQueryConditionInputItem.EndMark = EndMark_OR_T;
                                i++;
                            }
                            else {
                                if (Token[i + 1] == "and")
                                {
                                    mQueryConditionInputItem.EndMark = EndMark_AND_T;
                                    i++;
                                }
                            }
                        }

                        Conditionlst.Add(mQueryConditionInputItem);
                        mQueryConditionInputItem = new DataFilter.QueryConditionInputItem();
                        mQueryConditionInputItem.StartMark = String.Empty;
                        mQueryConditionInputItem.EndMark = String.Empty;

                        break;
                    default:
                        if (mQueryConditionInputItem.ColName == null)
                        {
                            foreach (string ColName in ColumnNameLst)
                            {
                                if (ColName.ToLower() == strToken.ToLower())
                                {
                                    //小写的复原
                                    mQueryConditionInputItem.ColName = ColName;
                                    break;
                                }
                            }
                        }
                        else
                        {
                            //类型设置
                            if (strToken.StartsWith("\"") & strToken.EndsWith("\""))
                            {
                                mQueryConditionInputItem.Value = strToken.Replace("\"", "");
                                mQueryConditionInputItem.Type = BsonType.String;
                            }
                            else
                            {
                                mQueryConditionInputItem.Value = strToken;
                                mQueryConditionInputItem.Type = BsonType.Int32;
                            }
                        }
                        break;
                }
            }
            if (Token[Token.Length - 1] != ")") {
                Conditionlst.Add(mQueryConditionInputItem);
            }
            return Conditionlst;
        }
        /// <summary>
        /// 通过Sql文的Where条件和列名称来获取Query条件
        /// </summary>
        /// <param name="SqlContent">Where条件</param>
        /// <param name="ColumnNameLst">列名称</param>
        /// <returns></returns>
        private static List <DataFilter.QueryConditionInputItem> SetQueryCondition(String SqlContent, List <String> ColumnNameLst)
        {
            List <DataFilter.QueryConditionInputItem> Conditionlst = new List <DataFilter.QueryConditionInputItem>();

            // (a=1 or b="A") AND c="3" => ( a = 1 or b = "A" ) and c = "3"
            //1. 除了引号里面的文字,全部小写
            String[] KeyWord = new String[] { "(", ")", "=", "or", "and", ">", ">=", "<", "<=", "<>" };
            foreach (String Keyitem in KeyWord)
            {
                SqlContent = SqlContent.Replace(Keyitem, " " + Keyitem + " ");
            }
            while (SqlContent.Contains("  "))
            {
                SqlContent = SqlContent.Replace("  ", " ");
            }
            SqlContent = SqlContent.Trim();
            //从左到右  ( a = 1 or
            //           b = "A" ) and
            //           c = "3"
            String[] Token = SqlContent.Split(" ".ToCharArray());
            DataFilter.QueryConditionInputItem mQueryConditionInputItem = new DataFilter.QueryConditionInputItem();
            mQueryConditionInputItem.StartMark = String.Empty;
            mQueryConditionInputItem.EndMark   = String.Empty;

            for (int i = 0; i < Token.Length; i++)
            {
                String strToken = Token[i].Replace("&nbsp;", " ");
                switch (strToken)
                {
                case "(":
                    mQueryConditionInputItem.StartMark = "(";
                    break;

                case "=":
                    mQueryConditionInputItem.Compare = DataFilter.CompareEnum.EQ;
                    break;

                case ">":
                    mQueryConditionInputItem.Compare = DataFilter.CompareEnum.GT;
                    break;

                case "<":
                    mQueryConditionInputItem.Compare = DataFilter.CompareEnum.LT;
                    break;

                case ">=":
                    mQueryConditionInputItem.Compare = DataFilter.CompareEnum.GTE;
                    break;

                case "<=":
                    mQueryConditionInputItem.Compare = DataFilter.CompareEnum.LTE;
                    break;

                case "<>":
                    mQueryConditionInputItem.Compare = DataFilter.CompareEnum.NE;
                    break;

                case "or":
                    mQueryConditionInputItem.EndMark = EndMark_OR;
                    Conditionlst.Add(mQueryConditionInputItem);
                    mQueryConditionInputItem           = new DataFilter.QueryConditionInputItem();
                    mQueryConditionInputItem.StartMark = String.Empty;
                    mQueryConditionInputItem.EndMark   = String.Empty;

                    break;

                case "and":
                    mQueryConditionInputItem.EndMark = EndMark_AND;
                    Conditionlst.Add(mQueryConditionInputItem);
                    mQueryConditionInputItem           = new DataFilter.QueryConditionInputItem();
                    mQueryConditionInputItem.StartMark = String.Empty;
                    mQueryConditionInputItem.EndMark   = String.Empty;

                    break;

                case ")":
                    mQueryConditionInputItem.EndMark = ")";

                    if (i == Token.Length - 1)
                    {
                        mQueryConditionInputItem.EndMark = EndMark_T;
                    }
                    else
                    {
                        if (Token[i + 1] == "or")
                        {
                            mQueryConditionInputItem.EndMark = EndMark_OR_T;
                            i++;
                        }
                        else
                        {
                            if (Token[i + 1] == "and")
                            {
                                mQueryConditionInputItem.EndMark = EndMark_AND_T;
                                i++;
                            }
                        }
                    }

                    Conditionlst.Add(mQueryConditionInputItem);
                    mQueryConditionInputItem           = new DataFilter.QueryConditionInputItem();
                    mQueryConditionInputItem.StartMark = String.Empty;
                    mQueryConditionInputItem.EndMark   = String.Empty;

                    break;

                default:
                    if (mQueryConditionInputItem.ColName == null)
                    {
                        foreach (String ColName in ColumnNameLst)
                        {
                            if (ColName.ToLower() == strToken.ToLower())
                            {
                                //小写的复原
                                mQueryConditionInputItem.ColName = ColName;
                                break;
                            }
                        }
                    }
                    else
                    {
                        //类型设置
                        if (strToken.StartsWith("\"") & strToken.EndsWith("\""))
                        {
                            mQueryConditionInputItem.Value = new BsonValueEx(new BsonString(strToken.Replace("\"", "")));
                        }
                        else
                        {
                            mQueryConditionInputItem.Value = new BsonValueEx(new BsonInt32(Convert.ToInt16(strToken)));
                        }
                    }
                    break;
                }
            }
            if (Token[Token.Length - 1] != ")")
            {
                Conditionlst.Add(mQueryConditionInputItem);
            }
            return(Conditionlst);
        }