由于需要,在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);

DataTable的子查询--DataTable.Select()的更多相关文章

  1. sql子查询 嵌套SELECT语句

    嵌套SELECT语句也叫子查询,一个 SELECT 语句的查询结果能够作为另一个语句的输入值.子查询不但能够出现在Where子句中,也能够出现在from子句中,作为一个临时表使用,也能够出现在sele ...

  2. linq to datatable 和lambda查询datatable

    用Linq查询DataTable static DataTable table = new DataTable(); static DataColumn dc = new DataColumn(); ...

  3. 子查询。ANY三种用法。ALL两种用法。HAVING中使用子查询。SELECT中使用子查询。

    子查询存在的意义是解决多表查询带来的性能问题. 子查询返回单行多列: ANY三种用法: ALL两种用法: HAVING中的子查询返回单行单列: SELECT中使用子查询:(了解就好,避免使用这种方法! ...

  4. Yii数据库子查询嵌入select中,而不是where条件语句中

    $subQuery = (new Query())->select('COUNT(*)')->from('user'); // SELECT `id`, (SELECT COUNT(*) ...

  5. 深入理解MySql子查询IN的执行和优化

    IN为什么慢? 在应用程序中使用子查询后,SQL语句的查询性能变得非常糟糕.例如: SELECT driver_id FROM driver where driver_id in (SELECT dr ...

  6. 读书笔记--SQL必知必会11--使用子查询

    11.1 子查询 查询(query),任何SQL语句都是查询.但此术语一般指SELECT语句. SQL还允许创建子查询(subquery),即嵌套在其他查询中的查询. 作为子查询的SELECT语句只能 ...

  7. SQL Server 数据库子查询基本语法

    一.SQL子查询语句 1.单行子查询        select ename,deptno,sal        from emp        where deptno=(select deptno ...

  8. Oracel_子查询

    SQL子查询 子查询语法 SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table) 子查询 ( ...

  9. MySQL 使用JOIN优化子查询

    1.数据准备 mysql> select * from student; +----+--------+----------+---------+-------------+ | id | na ...

随机推荐

  1. 虚拟机EAL: Error reading from file descriptor

    这个是虚拟机安装固有的BUG,代码差异如下: diff --git a/lib/librte_eal/linuxapp/igb_uio/igb_uio.c b/lib/librte_eal/linux ...

  2. ubuntu16.04安装virtualbox5.1失败 gcc:error:unrecognized command line option ‘-fstack-protector-strong’

    系统:ubuntu16.04.1 软件:Virtualbox-5.1 编译器:GCC 4.7.4 在如上环境下安装Vbx5.1提示我在终端执行/sbin/vboxconfig命令 照做 出现如下err ...

  3. 【UE4+Vive】学习笔记1

    16.9.10为了做房产项目,这两天开始学习Unreal Engine 4.之前一直用unity,但是视觉效果一直不满意,听说虚幻4的效果更好,就来试一试水. 1.安装UE4 参考资料一: http: ...

  4. SPSS数据分析—对数线性模型

    我们之前讲Logistic回归模型的时候说过,分类数据在使用卡方检验的时候,当分类过多或者每个类别的水平数过多时,单元格会划分的非常细,有可能会导致大量单元格频数很小甚至为0,并且卡方检验虽然可以分析 ...

  5. 关于firstChild,firstElementChild和children

    <div> <p>123</p> </div> 在上面这段代码中,如果使用以下js代码 var oDiv=document.getElementByTa ...

  6. IE兼容问题,各类css hack代码(亲测有效)

    现在大部分企业对浏览器兼容要求是IE7+或者IE8+,要求IE6的很少,此处一并写出. IE6: _margin-top: 20px; IE6+IE7: *margin-top: 20px; +mar ...

  7. Galera集群server.cnf参数调整--Innodb存储引擎内存相关参数(一)

    在innodb引擎中,内存的组成主要有三部分:缓冲池(buffer pool),重做日志缓存(redo log buffer),额外的内存池(additional memory pool).

  8. (SenchaTouch+PhoneGap)开发笔记(1)开发环境搭建一

    1.下载senchaTouch 2.下载senchaCMD 3.安装ruby(for windows ) 4.senchaCmd创建项目: 打开senchacmd,cd到senchaTouch的目录如 ...

  9. 文顶顶iOS开发博客链接整理及部分项目源代码下载

    文顶顶iOS开发博客链接整理及部分项目源代码下载   网上的iOS开发的教程很多,但是像cnblogs博主文顶顶的博客这样内容图文并茂,代码齐全,示例经典,原理也有阐述,覆盖面宽广,自成系统的系列教程 ...

  10. IT技术学习指导之Linux系统入门的4个阶段(纯干货带图)

    IT技术学习指导之Linux系统入门的4个阶段(纯干货带图) 全世界60%的人都在使用Linux.几乎没有人没有受到Linux系统的"恩惠",我们享受的大量服务(包括网页服务.聊天 ...