转:DataTable的Compute方法的应用
转自:http://www.cnblogs.com/hfliyi/archive/2013/01/08/2851944.html
项目中遇到计算平均值、标准偏差、平均值+标准偏差、平均值+2倍标准偏差、平均值+3倍标准偏差、平均值-标准偏差、平均值-2倍标准偏差、平均值-3倍标准偏差,要求提取出共用的方法(数据源可以是excel、csv、文本文件等),为此,想到取出数据再计算相应内容.
public object Compute(string expression,string filter)
- expression:要计算的表达式,参数需要时聚合函数。
- filter:要限制在表达式中进行计算的行的筛选器
- object:计算结果
- 举例如下:
1 例子 2 using (OracleConnection con = new OracleConnection(ConfigurationManager.AppSettings["ConnectionString"].ToString())) 3 { 4 con.Open(); 5 OracleCommand cmd = con.CreateCommand(); 6 cmd.CommandText = "SELECT * FROM EMP"; 7 OracleDataAdapter oda = new OracleDataAdapter(cmd); 8 DataSet ds = new DataSet(); 9 oda.Fill(ds); 10 DataTable dt = ds.Tables[0]; 11 //求和 12 string sum = Math.Round(Convert.ToDouble(dt.Compute("sum(sal)", "")), 2).ToString(); 13 //求平均 14 string avg = Math.Round(Convert.ToDouble(dt.Compute("avg(sal)", "")), 2).ToString(); 15 //具有筛选条件 求和 16 string sumFilter = Math.Round(Convert.ToDouble(dt.Compute("sum(sal)", "SAL<3000")), 2).ToString(); 17 //具有筛选条件 求平均 18 string avgFilter = Math.Round(Convert.ToDouble(dt.Compute("avg(sal)", "SAL<3000")), 2).ToString(); 19 //标准偏差 20 string stDev = Math.Round(Convert.ToDouble(dt.Compute("stdev(sal)", "")), 2).ToString(); 21 //具有筛选条件标准偏差 22 string stDevFilter = Math.Round(Convert.ToDouble(dt.Compute("stdev(sal)", "sal<3000")), 2).ToString(); 23 //最小值 24 string min = dt.Compute("min(sal)", "").ToString(); 25 //具有筛选条件的最小值 26 string minFiter = dt.Compute("min(sal)", "sal<3000").ToString(); 27 //平均值+标准偏差 28 string avgStDev = Math.Round(Convert.ToDouble(dt.Compute("avg(sal)+stdev(sal)", "")), 2).ToString(); 29 dt.Columns.Add("cl", typeof(string),"len(ename)"); 30 StringBuilder sb = new StringBuilder(); 31 sb.Append("求和:" + sum + "<br/>"); 32 sb.Append("求平均:" + avg + "<br/>"); 33 sb.Append("标准偏差:" + stDev + "<br/>"); 34 sb.Append("最小值:" + min + "<br/>"); 35 sb.Append("具有筛选条件求和:"+sumFilter+"<br/>"); 36 sb.Append("具有筛选条件求平均:"+avgFilter+"<br/>"); 37 sb.Append("具有筛选条件标准偏差:"+stDevFilter+"<br/>"); 38 sb.Append("具有筛选条件的最小值:"+minFiter+"<br/>"); 39 sb.Append("平均值+标准偏差:"+avgStDev+"<br/>"); 40 lbShow.Text = sb.ToString(); 41 }同时 dataset同样适用:dataset ds=new dataset(); ds.tables[0].compute(string,string);
人生在世,八方风雨,不如一笑,淡然处之~