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

时间: 2024-08-28 17:57:01

转:DataTable的Compute方法的应用的相关文章

C#中DataTable中的Compute方法使用收集

原文: C#中DataTable中的Compute方法使用收集 Compute函数的参数就两个:Expression,和Filter. Expresstion是计算表达式,关于Expression的详细内容请看这里“http://msdn2.microsoft.com/zh-cn/library/system.data.datacolumn.expression(VS.80).aspx”.而Filter则是条件过滤器,类似sql的Where条件. DataTable dt = new DataT

C#DataTable 使用GroupBy方法的lamda 表达式和Linq语句写法

https://www.cnblogs.com/johnblogs/p/6006867.html DataTable ds = new DataTable(); //1.lamda 表达式写法(推荐) var result = ds.AsEnumerable().GroupBy(s => new{Year = s.Field<int>("Year"), Month = s.Field<int>("Month"), Day = s.Fie

C#DataTable一些使用方法

C#DataTable一些使用方法   1,使用DataTable必须要引用System.Data. 2,定义一个DataTable DataTable dt=new DataTable(); 3,为DataTable创建列 //1.创建空列 DataColumn dc = new DataColumn(); dt.Columns.Add(dc); //2.创建带列名和类型名的列 dt.Columns.Add("column0", typeof(String)); //3.通过列架构添

C# CreateDataAdapter 创建 DbDataAdapter,以及用DataTable的Load方法获取数据

ADO.NET中 有了DbConnection,就可用DbConnection的CreateCommand 创建DbCommand,BeginTransaction创建DbTransaction 可以十分方便的实现工厂模式,操作不同的数据库. 但是唯独DbDataAdapter这个重要的对象无法通过DbConnection或DbCommand来创建,也无法实例化,必须使用SqlDataReader这种明确的类来创建实例,导致 获取数据 的方法不能在基类实现 以下是两个解决办法: 1.只有我们自己

C# Datatable导出Excel方法

C# 导出Excel方法  先引用下System.IO;System.data; 具体函数如下: 1 public static bool ExportCSV(DataTable dt, string fileNmae) 2 { 3 bool Msg = false; 4 string con = ""; 5 foreach (DataColumn dc in dt.Columns) 6 { 7 con += dc.ColumnName + ","; 8 } 9 c

C# DataTable的Select()方法不支持 != 判断

异常描述: 用户代码未处理 System.Data.SyntaxErrorExceptionHResult=-2146232032Message=无法解释位置 23 的标记“!”.Source=System.DataStackTrace:在 System.Data.ExpressionParser.Scan()在 System.Data.ExpressionParser.Parse()在 System.Data.DataExpression..ctor(DataTable table, Stri

DataTable 使用Select方法查询并排序,以及【拼接转义符的问题】

关于DataTable 里面用 /转义符拼接的问题 //这种写法表面上是正确,实现上在运行时调用Select方法实行查询会报错 string str = resetstrWhere + "\"" + "," + "\"" + dataQuery.DefaultOrderByClause; table = table.Select(str).CopyToDataTable(); //这种写法表面上是正确,实现上在运行时调用Sel

C#中datatable去重的方法

这篇文章主要介绍了C#中datatable去重的方法,通过两种不同的方法对比分析了datatable去重的技巧,非常具有实用价值,需要的朋友可以参考下 这里主要介绍两种方法: 1  数据库直接去除重复 select  distinct * from 表名 2 对 DataTable直接进行操作 DataTable dt=db.GetDt("select * from 表名");//获得datatable DataView dv = new DataView(dt);//虚拟视图吧,我这

C#中DataTable删除行的方法分析

本文实例讲述了C#中DataTable删除行的方法,分享给大家供大家参考之用.具体实现方法如下: 自己的删除例子(drTemp是表,gvSummary是dev 的gridview.单击右键点击grid删除): 1.dtTemp.Rows.RemoveAt(gvSummary.FocusedRowHandle); 2.dtTemp.Rows[gvSummary.FocusedRowHandle].Delete();  dtTemp.AcceptChanges(); 在C#中,如果要删除DataTa