现有如下数据:
        List<string> items = new List<string> ( )
        {
            "3","31","311","3117","add","delete","update","select","revert","312","3121","add","delete","update","select","revert","313","3131","revert","3132","add"
        };
       var id=17;      需要存储到数据库中:
       数据结构:    ID  UserID     PurviewID   Opreate
      结果:       1     17          3
                  2     17         31     
                  3     17         311
                  4     17         3117       11111
                  5     17         312 
                  6     17         3121       11111
                  7     17         313
                  8     17         3131       00001
                  9     17         3132       10000有增,删,改,查,还原 5个选项对应:“add","delete","update","select”  对应的数据实体:  var entity=new{ID=?,UserID=?,PurviewID=?,Opreate=?};不知道这么说清楚么?

解决方案 »

  1.   

    数据是从 treeView中取到的treenode的value需要把数组中的数字类型的值 和ID 17放到 实体userID和purviewID中数组中 "增删改查还原" 放到他前面那个purviewID后的Opreate字段中如  
         "add"                                     对应10000
         "add","delete"                            对应11000
         "add","delete","update"                       11100
         "add","delete","update","select"              11110
         "add","delete","update","select","revert"对应 11111
         "add","update","select","revert"              10111
    等 
    也就是 5个值中有 则为 1  没有 用0补齐
      

  2.   

            void Test(List<string> items)
            {
                int flag = 0;
                string item=string.Empty;
                for (int i = 1; i < items.Count; i++)
                {
                    if (flag == 0) item = items[i - 1];
                    switch (items[i])
                    {
                        case "add": flag += 1; break;
                        case "delete": flag += 10; break;
                        case "update": flag += 100; break;
                        case "select": flag += 1000; break;
                        case "revert": flag += 10000; break;
                        default:
                            //写入数据库的操作,item是PurviewID,flag是Opreate 
                            flag = 0; item = string.Empty; break;
                    }
                }
                //将最后一项写入数据库,item是PurviewID,flag是Opreate 
            }
      

  3.   


            static void Test(List<string> items)
            {
                int flag = 0;
                string item=string.Empty;
                for (int i = 1; i < items.Count; i++)
                {
                    if (flag == 0) item = items[i - 1];
                    switch (items[i])
                    {
                        case "add": flag += 10000; break;
                        case "delete": flag += 1000; break;
                        case "update": flag += 100; break;
                        case "select": flag += 10; break;
                        case "revert": flag += 1; break;
                        default:
                            //写入数据库的操作,item是PurviewID,flag是Opreate
                            Console.WriteLine(item + "," + (flag == 0 ? "" : flag.ToString("D5")));
                            flag = 0; item = string.Empty; break;
                    }
                }
                Console.WriteLine(item + "," + (flag == 0 ? "" : flag.ToString("D5")));
                //将最后一项写入数据库,item是PurviewID,flag是Opreate 
            }
    /*控制台输出:(仅输出PurviewID,Opreate)
    3,
    31,
    311,
    3117,11111
    312,
    3121,11111
    313,
    3131,00001
    3132,10000
    */
      

  4.   


    谢谢  我试下 结贴~hoho
      

  5.   

    在for循环后面应该加一句:
    if(item==string.Empty) item=items[items.Count-1];
      

  6.   

    试试看class Program
        {
            static void Main(string[] args)
            {
                List<string> items = new List<string>(
                    new string[]{ 
                        "3","31","311","3117","add","delete","update","select","revert","312","3121","add","delete","update","select","revert","313","3131","revert","3132","add"
                    }); 
                int id = 17;            //用于模拟你的数据库表结构
                DataTable dt = new DataTable();
                dt.Columns.Add(new DataColumn("ID", typeof(int)));
                dt.Columns.Add(new DataColumn("UserID", typeof(int)));
                dt.Columns.Add(new DataColumn("PurviewID", typeof(string)));
                dt.Columns.Add(new DataColumn("Opreate", typeof(string)));            //正文
                Regex regex = new Regex(@"[0-9]+");
                string[] last = null; //顺序:s, "add", "delete", "update", "select", "revert"
                int i = default(int);
                string s = null;
                
                for (int j = 0; j <= items.Count; j++)
                {
                    if (j < items.Count && (s = items[j]) != null && !regex.IsMatch(s))
                    {
                        if (s.Equals("add")) last[1] = "1";
                        else if (s.Equals("delete")) last[2] = "1";
                        else if (s.Equals("update")) last[3] = "1";
                        else if (s.Equals("select")) last[4] = "1";
                        else if (s.Equals("revert")) last[5] = "1";
                    }
                    else
                    {
                        if (last != null)
                        {
                            dt.Rows.Add(new object[] { 
                                i++, //ID
                                id, //UserID
                                last[0], //PurviewID
                                string.Format("{0}{1}{2}{3}{4}", last[1], last[2], last[3], last[4], last[5]) //Opreate
                            }); //这里应该替换成插入数据库的语句
                        }                    last = new string[] { s, "0", "0", "0", "0", "0" };
                    }
                }            //打印调试信息
                foreach (DataRow dr in dt.Rows)
                {
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        System.Console.Write(string.Format("{0}\t", dr[j]));
                    }                System.Console.WriteLine(string.Empty);
                }            System.Console.ReadKey();
            }
        }