[逻辑鬼才] 实现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 

posted @ 2021-02-24 20:11  Alexander8527  阅读(209)  评论(0编辑  收藏  举报