对DataTable进行过滤筛选的一些方法Select,dataview

当你从数据库里取出一些数据,然后要对数据进行整合,你很容易就会想到:

DataTable dt = new DataTable();//假设dt是由"SELECT C1,C2,C3 FROM T1"查询出来的结果 
for (int i = 0; i < dt.Rows.Count; i++) 

    if (dt.Rows[i]["C1"].ToString() == "abc")//查询条件 
    { 
        //进行操作 
    } 
}
但这种做法用一两次还好说,用多了就累了。那有没有更好的方法呢?记得LinQ是可以直接对DataTable进行查询操作的,那在.Net Framework 2.0里,有没有类似的方法呢?答案是肯定的,就是dt.Select(),上面的操作可以改成这样:

DataRow[] drArr = dt.Select("C1=’abc’");//查询
还可以这样操作:

DataRow[] drArr = dt.Select("C1 LIKE ’abc%’");//模糊查询 
DataRow[] drArr = dt.Select("’abc’ LIKE C1 + ’%’", "C2 DESC");//另一种模糊查询的方法 
DataRow[] drArr = dt.Select("C1=’abc’", "C2 DESC");//排序
问题又来了,如果要把DataRow赋值给新的DataTable,怎么赋值呢?你可能会想到:

DataTable dtNew = dt.Clone(); 
for (int i = 0; i < drArr.Length; i++) 

    dtNew.Rows.Add(drArr[i]); 
}
但这样程序就会出错,说该DataRow是属于其他DataTable的,那要怎么做呢?很简单,这样就可以解决了:

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

}

这样就完成了。

3.5里的DataRow[]有个扩展方法CopyToDataTable()

/* 
* 补充一下,还可以利用DataView来达到检索的目的。 
*/ 
DataTable dataSource = new DataTable(); 
DataView dv = dataSource.DefaultView; 
dv.RowFilter = "columnA = 'abc'"; 
//1.过滤后直接获取DataTable 
DataTable newTable1 = dv.ToTable(); 
//2.设置新DataTable的TableName 
DataTable newTable2 = dv.ToTable("NewTableName"); 
//3.设置新表是否过滤重复项,拥有的列的列名以及出现的顺序 
//即可以设置新表的字段。但是字段名肯定是老表dataSource中拥有的。 
DataTable newTable3 = 
dv.ToTable(true, new string[] { "columnA,columnF,columnC" }); 
//4.综合了2.3两点。 
DataTable newTable4 = 
dv.ToTable("NewTableName", true, new string[] { "columnA,columnF,columnC" });

最新文章

  1. ajax温习
  2. EntityFramework_MVC4中EF5 新手入门教程之一 ---1.创建实体框架数据模型
  3. 自学EF一些小笔记
  4. HackerRank &quot;Lucky Numbers&quot;
  5. JMeter二次开发(2)-编写 JSON Assertion 插件
  6. HeadFirst设计模式之单例模式
  7. 洛谷 [P2756] 飞行员配对方案问题
  8. vue_drf之实现短信验证码
  9. DBeaver数据库管理工具连接Sybase数据库
  10. $ORACLE_HOME/rdbms/demo示例安装
  11. ADB连接手机的两种方式(usb数据线连接和wifi连接)
  12. linux下挂载VHD等虚拟磁盘文件
  13. Oracle Rman 增量备份与差异备份
  14. Spring-boot简单的理解
  15. Binary Tree Preorder Traversal leetcode java
  16. [Jobdu] 题目1510:替换空格
  17. EF按时间范围条件查询
  18. day21 git &amp; github + Celery 分布式任务队列
  19. java servlet jsp 导入boostrap css js
  20. CodeForces 667A Pouring Rain

热门文章

  1. C语言输出当前日期和时间
  2. Javascript学习-闭包
  3. DataGridView导出Excel
  4. 【Android】跟着教程做の学习笔记
  5. Oracle Exadata体系笔记
  6. uva 11991
  7. 数据结构——Java实现单向链表
  8. 【转】Eclipse快捷键 10个最有用的快捷键----不错
  9. Android RecyclerView使用详解(二)
  10. 你能识别这些科技公司的真假logo吗?