C# DataTable的Compute和Expression

最近在使用DataTable装载数据,它的Compute的函数及列Expresiion表达式可很好的解决计算问题。
dt 包含reasonCode,reason,renum三列,其中renum列为数字类型。
1、Compute 计算

 int reworkSum = 0;
 object objSum = dt.Compute("sum(renum)","");
 if (objSum != DBNull.Value && objSum != null)
 {
     reworkSum = Convert.ToInt32(objSum.ToString());
 }

2、Expression表达式
dt增加列rate,计算占比,计算结果保留2位小数。
由于最后一行增加汇总,汇总比率值不需要计算,因此表达式中用iff判断列值是否为合计。

DataColumn column = new DataColumn("rate", typeof(string));
dt.Columns.Add(column);
column.Expression = "iif(reasoncode not in ('合计'),Convert(Convert(renum*10000/sum(renum),'System.Int32')/100,'System.String')+'%','')";

if (reworkSum > 0)
{
    DataRow drN = dt.NewRow();
    drN["reasoncode"] = "合计";
    drN["renum"] = reworkSum;
    dt.Rows.Add(drN);
}

Expression支持的函数:

len(reason);
substring(reason,1,3);//索引从1开始
convert(reasoncode,'System.Int32');//字符串转数字
renum/sum(renum);
max(renum)-renum;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值