现有如下数据:
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=?};不知道这么说清楚么?
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=?};不知道这么说清楚么?
"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补齐
{
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
}
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
*/
谢谢 我试下 结贴~hoho
if(item==string.Empty) item=items[items.Count-1];
{
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();
}
}