zoukankan      html  css  js  c++  java
  • DataTable的子查询--DataTable.Select()

    由于需要,在sql查询获得结果集之后,又需要对该结果再进行筛选一次,若重新从sql中查询会浪费资源,因此特地去查阅了一些资料,学会了用DataTable进行子查询。

    在.Net Framework 2.0里,我们可以直接利用DataTable的Select()方法进行子查询,十分方便。

    DataTable dt = new DataTable();    //假设dt是由"SELECT ID,Name,Sex,Age FROM Customer_Info"查询出来的结果

    现在我们需要再进行筛选,

    1.假如我们需要 性别为男 的客户信息

    DataRow[] drNew= dt.Select("Sex=’男’");//查询

    2.假如我们需要 名字里带有“生” 的客户信息

    DataRow[] drNew = dt.Select("Name LIKE ’%杨%’");//模糊查询 

    3.假如我们需要 年龄大于15且结果按照姓名升序年龄降序 的客户信息

    DataRow[] drNew = dt.Select("Age > 15", "Name asc,Age desc");//查询+排序 

    4.假如我们要取结果中第15-20条记录,做法如下:

    DataTable dtNew = dt.Clone();
    DataRow[] drNew= dt.Select();//获得所有行
    for(int i=14;i<20;i++)
    {
    dtNew.ImportRow(drNew[i]);
    }


    如果要把DataRow赋值给新的DataTable,怎么赋值呢?

    DataTable dtNew = dt.Clone();
    for (int i = 0; i < drNew.Length; i++)
    {
    dtNew.Rows.Add(drNew[i]);
    }
    但这样程序就会出错,说该DataRow是属于其他DataTable的,那要怎么做呢?很简单,这样就可以解决了:

    DataTable dtNew = dt.Clone();
    for (int i = 0; i < drNew.Length; i++)
    {
    dtNew.ImportRow(drNew[i]);
    }

    这样就OK了,是不是很方便。

    以上便是刚刚学的一点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);

  • 相关阅读:
    指针+[][]T 类型
    linux适用小工具-tmux
    wrk+lua进行压力测试
    brew更换为国内源
    k8s证书更新
    ssh隧道
    kubeadm安装集群系列(kubeadm 1.15.1)
    harbor清理存储
    第十周课程总结
    第九周课程总结&第七次实验报告
  • 原文地址:https://www.cnblogs.com/kingsony/p/3289405.html
Copyright © 2011-2022 走看看