我需要一种方法来更新计算出的Datatable的基于其他字符串列中的字符串的列。 例如:
x y FormulaCol ComputedCol ------------------------------ ----------- 2 5 x+y 7 2 5 x*y 10
我知道我可以使用for循环并计算结果列:
for (int i = 0; i < DT.Rows.Count; i++){
string formula=DT.Rows[i]["FormulaCol"].ToString().Replace("x",DT.Rows[i]["x"]).Replace("y",DT.Rows[i]["y"])
DT.Rows[i]["ComputedCol"] =(int)DT.Compute(formula , "")
}
还有更好的方法吗?
答案 0 :(得分:3)
如果你不想使用循环,试试这个......
DT = DT.AsEnumerable()
.Select(
row =>
{
row["ComputedCol"] = (int)DT.Compute(row["FormulaCol"].ToString()
.Replace("x", row["x"].ToString())
.Replace("y", row["y"].ToString()), "");
return row;
}
).CopyToDataTable<DataRow>();
答案 1 :(得分:1)
一个简单但很长的解决方案:
这就是你的表格的样子,
x y FormulaCol ComputedCol ------------------------------ ----------- 2 5 + 7 2 5 * 10
和您的代码:
for (int i = 0; i < DT.Rows.Count; i++){
switch(DT.Rows[i]["FormulaCol"].ToString()){
case "+":
int formula=(int) DT.Rows[i]["x"] + (int) DT.Rows[i]["y"];
DT.Rows[i]["ComputedCol"] = formula;
break;
case "-":
int formula=(int) DT.Rows[i]["x"] - (int) DT.Rows[i]["y"];
DT.Rows[i]["ComputedCol"] = formula;
break;
case "*":
int formula=(int) DT.Rows[i]["x"] * (int) DT.Rows[i]["y"];
DT.Rows[i]["ComputedCol"] = formula;
break;
case "/":
int formula=(int) DT.Rows[i]["x"] / (int) DT.Rows[i]["y"];
DT.Rows[i]["ComputedCol"] = formula;
break;
}
}
希望这有帮助!
答案 2 :(得分:0)
for (int i = 0; i < DT.Rows.Count; i++){
string formula=DT.Rows[i]["FormulaCol"].ToString()
for (int j = 0; j < DT.Columns.Count; j++){
furmula=formula.Replace(DT.Columns[j].Name ,DT.Rows[i][j].ToString())
}
DT.Rows[i]["ComputedCol"] =(int)DT.Compute(formula , "")
}