//public GradeTestObject(SerializationInfo info, StreamingContext context)
        //{
        //   comment = info.GetString("comment");
        //   function = info.GetString("function");
        //   image = info.GetString("image");
        //   name = info.GetString("name");
        //   units = info.GetString("units");
        //   unitType = info.GetString("unitType");
        //   useIt = info.GetString("useIt");
        //   tableNo = info.GetString("tableNo");

        //   int count = info.GetInt32("gradeNamesListCount");
        //   for (int i = 0; i < count; i++)
        //   {
        //      this.gradeNamesList.Add(info.GetString("gnl" + i.ToString()));
        //   }

        //   count = info.GetInt32("lowerLimitListCount");
        //   for (int i = 0; i < count; i++)
        //   {
        //      this.lowerLimitList.Add(info.GetString("lll" + i.ToString()));
        //   }

        //   count = info.GetInt32("upperLimitListCount");
        //   for (int i = 0; i < count; i++)
        //   {
        //      this.upperLimitList.Add(info.GetString("ull" + i.ToString()));
        //   }

        //   count = info.GetInt32("rankFunctionListCount");
        //   for (int i = 0; i < count; i++)
        //   {
        //      this.rankFunctionList.Add(info.GetString("rfl" + i.ToString()));
        //   }

        //}

        //public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
        //{
        //   info.AddValue("comment", comment);
        //   info.AddValue("function", function);
        //   info.AddValue("image", image);
        //   info.AddValue("name", name);
        //   info.AddValue("units", units);
        //   info.AddValue("unitType", unitType);
        //   info.AddValue("useIt", useIt);
        //   info.AddValue("tableNo", tableNo);

        //   info.AddValue("gradeNamesListCount", gradeNamesList.Count);
        //   for (int i = 0; i < this.gradeNamesList.Count; i++)
        //   {
        //      info.AddValue("gnl" + i.ToString(), this.gradeNamesList[i]);
        //   }

        //   info.AddValue("lowerLimitListCount", lowerLimitList.Count);
        //   for (int i = 0; i < this.lowerLimitList.Count; i++)
        //   {
        //      info.AddValue("lll" + i.ToString(), this.lowerLimitList[i]);
        //   }

        //   info.AddValue("upperLimitListCount", upperLimitList.Count);
        //   for (int i = 0; i < this.upperLimitList.Count; i++)
        //   {
        //      info.AddValue("ull" + i.ToString(), this.upperLimitList[i]);
        //   }

        //   info.AddValue("rankFunctionListCount", rankFunctionList.Count);
        //   for (int i = 0; i < this.rankFunctionList.Count; i++)
        //   {
        //      info.AddValue("rfl" + i.ToString(), this.rankFunctionList[i]);
        //   }
        //}

        /// <summary>
        /// Kind a like a limited SQL SELECT statement for this "table."
        /// For Where Use C# logic symbols
        /// AND is &&; OR is ||; Equal is ==
        /// Greater than less than use C# symbols.
        /// Colunms are defined by a combination of Hitachi.Tester.Enumns.GradeTestObjectRankEnum
        ///  and Hitachi.Tester.Enums.GradeTestObjectCommonEnum. Use ToString() for correct spelling.
        ///
        /// This function returns data from tables.
        /// </summary>
        /// <param name="columns">Comma seperated list of columns to return</param>
        /// <param name="where">String of conditions</param>
        /// If you ask for something that does not exist it does not error out or pop exception;
        ///  it instead returns an empty string.
        ///
        /// <returns>Dictionary of Data you requested</returns>
        public Dictionary <string, string> SELECT(string columns, string where)
        {
            // List of columns that we will try to return
            string[] columnTokens = columns.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
            // dictionary for our result (if any).
            Dictionary <string, string> result = new Dictionary <string, string>();
            // dictionary for this instance's columns.
            Dictionary <string, string> thisData = new Dictionary <string, string>();


            //public enum GradeTestObjectRankEnum
            //public enum GradeTestObjectCommonEnum


            // Put this (row) into a dictionary of columns
            thisData.Add(Hitachi.Tester.Enums.GradeTestObjectCommonEnum.NAME.ToString(), name);
            thisData.Add(Hitachi.Tester.Enums.GradeTestObjectCommonEnum.IMAGE.ToString(), image);
            thisData.Add(Hitachi.Tester.Enums.GradeTestObjectCommonEnum.COMMENT.ToString(), comment);
            thisData.Add(Hitachi.Tester.Enums.GradeTestObjectCommonEnum.FUNCTION.ToString(), function);
            thisData.Add(Hitachi.Tester.Enums.GradeTestObjectCommonEnum.UNITS.ToString(), units);
            thisData.Add(Hitachi.Tester.Enums.GradeTestObjectCommonEnum.TYPES.ToString(), unitType);
            thisData.Add(Hitachi.Tester.Enums.GradeTestObjectCommonEnum.USE.ToString(), useIt);
            thisData.Add(Hitachi.Tester.Enums.GradeTestObjectCommonEnum.TABLENO.ToString(), tableNo);

            // Get the rank count
            int count = Count;

            // Loop for each rank.
            for (int i = 0; i < count; i++)
            {
                thisData.Add(Hitachi.Tester.Enums.GradeTestObjectRankEnum.RANKNAME.ToString() + (i + 1).ToString(), gradeNamesList[i]);
                thisData.Add(Hitachi.Tester.Enums.GradeTestObjectRankEnum.UPPER.ToString() + (i + 1).ToString(), upperLimitList[i]);
                thisData.Add(Hitachi.Tester.Enums.GradeTestObjectRankEnum.LOWER.ToString() + (i + 1).ToString(), lowerLimitList[i]);
                thisData.Add(Hitachi.Tester.Enums.GradeTestObjectRankEnum.FUNCTION.ToString() + (i + 1).ToString(), rankFunctionList[i]);
            }

            ConditionParser cp = new ConditionParser();

            // See if the conditions match
            if (cp.IsOk(where, thisData))
            {
                // Put requested column data in the result dictionary.
                foreach (string col in columnTokens)
                {
                    try
                    {
                        result.Add(col.Trim(), thisData[col.Trim()]);
                    }
                    catch { }
                }
            }
            return(result);
        }