[逻辑鬼才] 实现DataTable.Compute对很多多多列的计算
在DataTable对列的计算中,我们常用到Compute这一方法。
DataTable.Compute(string Expression, string Filter);
当遇到很多列而且表达式相同的情况下,我们可以用数组的方法实现对DataTable列的计算
首先我们先来看一下常规的方法
dt.Compute("avg(columName1)", "");
dt.Compute("avg(columName2)", "");
dt.Compute("avg(columName3)", "");
dt.Compute("avg(columName4)", "");
dt.Compute("avg(columName5)", "");
dt.Compute("avg(columName6)", "");
dt.Compute("avg(columName7)", "");
这样的表达式一样,只有列名不一样,可以用一个for循环来操作
int[] aver = new int[7];
for(int i = 0; i < 7; i++)
{
}
重点来了: 在Expression语法中若要求平均只能通过:”avg(列名)“的方法来实现,若将列名更换为”avg(dt.Columns[i].Capital)“,由于引号内为字符型,那么则无法识别表达式。究其本质,其结构为avg+(列名),且全为string类型 ** **尝试下列操作。
dt.Compute((avg(ExcelTable.Columns[i + 3].Caption)).Tostring(), "");
然而并无卵用,还提示你括号可以删除。
再次究其本质,括号太多可能机器也会傻傻分不清楚,我们可以用+,是的加号。用加号可以连接两个字符串** **代码如下
for (int i = 0; i < 7; i++)
{
aver[i] = (int)dt.Compute("avg" + "(" + dt.Columns[i].Caption.ToString() + ")", "");
}
完美运行。nice 逻辑鬼才