有你需要解决两个问题:
- 如何树状结构转换成所有可能值集合的集合。
- 如何将设置的值转换为sql表达式。
的第一个问题可能最容易通过递归迭代列,并收集值的集合上前一起到列表:
// convert tree into collection of value sets
public IEnumerable<List<string>> ExplodeValueSets(T tree, int cIndex = 0) {
// recursive portion as long as there are more columns to process
if (cIndex < tree.column.Length) {
// recursive generate list for rest of columns
var subResult = ExplodeValueSets(tree, cIndex + 1);
// combine values in this column with recursively-generated
// sets from rest of columns to build up larger sets
foreach (var result in subResult)
foreach (var value in tree.column[cIndex].value)
yield return new List<string> { value.fieldVal }.Concat(result).ToList();
} else {
// base condition - all columns are processed, so return empty list
yield return new List<string>();
}
}
这将原有的树状结构转换成你的图片到列表的集合:
从这里,这是一个简单的事情,这些数值组转换成SQL语句:
public string GenerateSQL(T tree) {
var valueSets = ExplodeValueSets(tree);
var sql = new StringBuilder();
foreach (var set in valueSets)
sql.AppendLine(GenerateSingleSQLInsert(tree, set));
var finalSql = sql.ToString();
return finalSql;
}
public string GenerateSingleSQLInsert(T tree, List<string> values) {
var sqlFormat = "insert into [{0}]([{1}]) values('{2}');";
var table = tree.tableName;
var columnList = string.Join("],[", tree.column.Select (c => c.className).ToArray());
var valueList = string.Join("','", values.ToArray());
var sql = string.Format(sqlFormat, table, columnList, valueList);
return sql;
}
把它一起使用的样品树(我做的所有属性和类别中使用公开在为了这个工作正确):
T tree = new T {
tableName = "T1",
column = new C[] {
new C { className = "C1", value = new V[] { new V { fieldVal = "V1" }, new V { fieldVal = "V2" } } },
new C { className = "C2", value = new V[] { new V { fieldVal = "V1" } } },
new C { className = "C3", value = new V[] { new V { fieldVal = "V1" } } }
}
};
var sql = GenerateSQL(tree);
Console.WriteLine(sql);
输出:
insert into [T1]([C1],[C2],[C3]) values('V1','V1','V1');
insert into [T1]([C1],[C2],[C3]) values('V2','V1','V1');
嗨伴侣,这正是我需要的,分裂的过程中两个母鹿他们做出了巨大的改变。让我试着将这个逻辑集成到我的应用程序中并更新问题:)感谢您的帮助 – Umamaheswaran 2013-02-22 14:15:39