• DataTable中数据记录的统计


           在使用数据库时例如SQL-Server、Oracle这些数据库,可以轻松的通过统计和计算函数例如Sum、Aver、Count等统计或计算出相关结果,那么,在已经把数据检索出来的DataTable数据集中能否同样使用呢?在程序中根据需要动态创建的DataTable是没有办法使用 sql语句进行查询统计的,例如没有办法使用Select语句来获取查询统计结果。那么在DataTable中怎么来进行统计呢?

    有一个简单的方法,可以轻松的获得DataTable中的记录统计结果。这个简单的方法就是调用功能强大的DataTable的函数Compute。

    函数如下

    public Object Compute(
    	string expression,
    	string filter
    )

    参数
    expression
    类型:System..::.String

    参数需要聚合函数,要计算的表达式字符串,基本上类似于Sql Server中的统计表达式

    filter
    类型:System..::.String

    要限制在表达式中进行计算的行的筛选器。 统计的过滤字符串,只有满足这个过滤条件的记录才会被统计,也就是确定在表达式中使用哪些行

    返回值
    类型:System..::.Object

    Object,设置为计算结果。

    以下示例为拷贝:网上有的东西,没有必要原创了。。。。

      以下示例,以SQL-Server数据库中的Northwind数据库中的Orders数据表,描述订单信息,包含字段为:订单号(OrderID)、客户编号(CustomerID)、职工编号(EmployeeID)、订货时间(OrderDate)、船号(ShipVia)、运费(Freight)。

    1.统计所有职工编号EmployeeID为5的数量:

    table.Compute("Count(*)","EmployeeID=5");

    2.统计所有运费Freight中运费大于100的个数

    table.Compute("Count(*)","Freight>100'");

    3.统计运费Freight的平均值

    table.Compute("Aver(Freight)","true");

    4.统计职工编号EmployeeID为5的运费总额:

    table.Compute("Sum(Freight)"," EmployeeID=5");

    以上都是计算每一列的合计,那么要添加一行求合计可以使用下面的方法:

    //创建一个数据集

    DataSet customers = new DataSet();

    //在数据集中添加一个名称为CustomersTable的数据表

    DataTable customersTable = customers.Tables.Add("CustomersTable");

    //创建一个新行并添加到CustomersTable数据表中

    DataRow dataRow = new DataRow();

    dataRow= customersTable.NewRow();

    //然后就是统计了,声明连个int 变量i:循环变量, colCnt: customersTable表中的列数

    int i ;

    int colCnt ;

    colCnt = customersTable.Cols.Count;

    for( i=0 ;i< colCnt -1;i++)

    //求第i列的和并且结果赋值给新的dataRow数据行

    dataRow(i)= customersTable.Compute("Sum("+i.ToString()+")","true");

    //把数据行添加到customersTable数据表中

    customersTable.Rows.Add(dataRow);

  • 相关阅读:
    使用systemctl管理指定服务需要做的配置
    挖矿病毒
    灰度发布系统
    血一般的教训,请慎用insert into select
    关于程序bug的闲谈
    来自一个网络监控软件的自述
    为什么CTO、技术总监、架构师都不写代码,还这么牛逼?
    原来 Elasticsearch 还可以这么理解
    爬了20W+条猫咪交易数据,它不愧是人类团宠
    NPUCTF2020 这是什么觅🐎
  • 原文地址:https://www.cnblogs.com/zyqgold/p/1666833.html
Copyright © 2020-2023  润新知