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..::.ObjectObject,设置为计算结果。
以下示例,以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()的更多相关文章
- sql子查询 嵌套SELECT语句
嵌套SELECT语句也叫子查询,一个 SELECT 语句的查询结果能够作为另一个语句的输入值.子查询不但能够出现在Where子句中,也能够出现在from子句中,作为一个临时表使用,也能够出现在sele ...
- linq to datatable 和lambda查询datatable
用Linq查询DataTable static DataTable table = new DataTable(); static DataColumn dc = new DataColumn(); ...
- 子查询。ANY三种用法。ALL两种用法。HAVING中使用子查询。SELECT中使用子查询。
子查询存在的意义是解决多表查询带来的性能问题. 子查询返回单行多列: ANY三种用法: ALL两种用法: HAVING中的子查询返回单行单列: SELECT中使用子查询:(了解就好,避免使用这种方法! ...
- Yii数据库子查询嵌入select中,而不是where条件语句中
$subQuery = (new Query())->select('COUNT(*)')->from('user'); // SELECT `id`, (SELECT COUNT(*) ...
- 深入理解MySql子查询IN的执行和优化
IN为什么慢? 在应用程序中使用子查询后,SQL语句的查询性能变得非常糟糕.例如: SELECT driver_id FROM driver where driver_id in (SELECT dr ...
- 读书笔记--SQL必知必会11--使用子查询
11.1 子查询 查询(query),任何SQL语句都是查询.但此术语一般指SELECT语句. SQL还允许创建子查询(subquery),即嵌套在其他查询中的查询. 作为子查询的SELECT语句只能 ...
- SQL Server 数据库子查询基本语法
一.SQL子查询语句 1.单行子查询 select ename,deptno,sal from emp where deptno=(select deptno ...
- Oracel_子查询
SQL子查询 子查询语法 SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table) 子查询 ( ...
- MySQL 使用JOIN优化子查询
1.数据准备 mysql> select * from student; +----+--------+----------+---------+-------------+ | id | na ...
随机推荐
- .Net4.0的网站在IE10、IE11出现“__doPostBack未定义”的解决办法。
方法一.浏览器设置成兼容模式. 方法二.安装服务器版的.Net40的补丁.http://download.csdn.net/detail/5653325/6642051 方法三.点击VS的工具菜单-- ...
- springmvc的foward和redirect跳转简单解析
Spring MVC 中,我们在返回逻辑视图时,框架会通过 viewResolver 来解析得到具体的 View,然后向浏览器渲染.假设逻辑视图名为 hello,通过配置,我们 配置某个 ViewRe ...
- python3 生成器&迭代器
#Author by Andy#_*_ coding:utf-8 _*_import timefrom collections import Iterable#列表生成式def func(): lis ...
- Centos安装vsftp服务
1.安装vsftp yum install vsftpd 2.开启vsftp服务,设置开机自启 service vsftpd restart chkconfig vsftpd on 停止vsftpd: ...
- sphinx全文检索 安装配置和使用
公司项目刚刚导入大量产品数据,然后发现网站的产品搜索很卡,原本是原生sql的like来做模糊搜索,数据量20W的时候还可以接受,但是上百万就很卡了,所以需要做优化. 经过考虑,打算采用全文检索 sph ...
- Codility Tree Height
public class HeightOfTreeSolution { static int height=-1; public int solution(Tree T) { // write you ...
- javascript实例备忘
一,javascript动态显示: 如显示效果上图所示: 如图显示鼠标放在百度谷歌等字样上市动态显示其内容明细:代码如下:<head><title></title> ...
- SharePoint 2013 List 备份使用
在测试环境新建List后经过不懈的调整,验证终于做出一个像模像样的表单. 这时候问题来... 要怎么迁移到生产环境或者正式环境呢? 在网上找了一些资料,不过都是10的.. 其实想想13跟10区别不大, ...
- windows php swoole 安装
Cygwin 官方地址:http://www.cygwin.com/ swoole 官方下载地址:https://github.com/swoole/swoole-src/releases 1.下载 ...
- Post提交
以下两种Post提交方法都可行 /// <summary> /// post 数据 /// </summary> /// <param name="url&qu ...