转: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);

原文地址:https://www.cnblogs.com/bbker/p/4734528.html