DataTable的Compute方法的應用


項目中遇到計算平均值、標准偏差、平均值+標准偏差、平均值+2倍標准偏差、平均值+3倍標准偏差、平均值-標准偏差、平均值-2倍標准偏差、平均值-3倍標准偏差,要求提取出共用的方法(數據源可以是excel、csv、文本文件等),為此,想到取出數據再計算相應內容.

public object Compute(string expression,string filter)

expression:要計算的表達式,參數需要時聚合函數。
filter:要限制在表達式中進行計算的行的篩選器
object:計算結果
舉例如下:
例子
 1     using (OracleConnection con = new OracleConnection(ConfigurationManager.AppSettings["ConnectionString"].ToString()))
 2             {
 3                 con.Open();
 4                 OracleCommand cmd = con.CreateCommand();
 5                 cmd.CommandText = "SELECT * FROM EMP";
 6                 OracleDataAdapter oda = new OracleDataAdapter(cmd);
 7                 DataSet ds = new DataSet();
 8                 oda.Fill(ds);
 9                 DataTable dt = ds.Tables[0];
10                 //求和
11                 string sum = Math.Round(Convert.ToDouble(dt.Compute("sum(sal)", "")), 2).ToString();
12                 //求平均
13                 string avg = Math.Round(Convert.ToDouble(dt.Compute("avg(sal)", "")), 2).ToString();
14                 //具有篩選條件 求和
15                 string sumFilter = Math.Round(Convert.ToDouble(dt.Compute("sum(sal)", "SAL<3000")), 2).ToString();
16                 //具有篩選條件 求平均
17                 string avgFilter = Math.Round(Convert.ToDouble(dt.Compute("avg(sal)", "SAL<3000")), 2).ToString();
18                 //標准偏差
19                 string stDev = Math.Round(Convert.ToDouble(dt.Compute("stdev(sal)", "")), 2).ToString();
20                 //具有篩選條件標准偏差
21                 string stDevFilter = Math.Round(Convert.ToDouble(dt.Compute("stdev(sal)", "sal<3000")), 2).ToString();
22                 //最小值
23                 string min = dt.Compute("min(sal)", "").ToString();
24                 //具有篩選條件的最小值
25                 string minFiter = dt.Compute("min(sal)", "sal<3000").ToString();
26                 //平均值+標准偏差
27                 string avgStDev = Math.Round(Convert.ToDouble(dt.Compute("avg(sal)+stdev(sal)", "")), 2).ToString();
28                 dt.Columns.Add("cl", typeof(string),"len(ename)");
29                 StringBuilder sb = new StringBuilder();
30                 sb.Append("求和:" + sum + "<br/>");
31                 sb.Append("求平均:" + avg + "<br/>");
32                 sb.Append("標准偏差:" + stDev + "<br/>");
33                 sb.Append("最小值:" + min + "<br/>");
34                 sb.Append("具有篩選條件求和:"+sumFilter+"<br/>");
35                 sb.Append("具有篩選條件求平均:"+avgFilter+"<br/>");
36                 sb.Append("具有篩選條件標准偏差:"+stDevFilter+"<br/>");
37                 sb.Append("具有篩選條件的最小值:"+minFiter+"<br/>");
38                 sb.Append("平均值+標准偏差:"+avgStDev+"<br/>");
39                 lbShow.Text = sb.ToString();
40             }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM