[逻辑鬼才] 实现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 @   Alexander8527  阅读(218)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示
主题色彩