筛选DataTable中数据的方法

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

1 DataTable dt = new DataTable();//假设dt是由"SELECT C1,C2,C3 FROM T1"查询出来的结果
2 for (int i = 0; i < dt.Rows.Count; i++)
3 {
4 if (dt.Rows[i]["C1"].ToString() == "abc")//查询条件
5 {
6 //进行操作
7 }
8 }

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

1 DataRow[] drArr = dt.Select("C1=’abc’");//查询
2 //还可以这样操作:
3
4 DataRow[] drArr = dt.Select("C1 LIKE ’abc%’");//模糊查询
5 DataRow[] drArr = dt.Select("’abc’ LIKE C1 + ’%’", "C2 DESC");//另一种模糊查询的方法
6 DataRow[] drArr = dt.Select("C1=’abc’", "C2 DESC");//排序

问题又来了,如果要把DataRow赋值给新的DataTable,怎么赋值呢?你可能会想到:

1 DataTable dtNew = dt.Clone();
2 for (int i = 0; i < drArr.Length; i++)
3 {
4 dtNew.Rows.Add(drArr[i]);
5 }

但这样程序就会出错,说该DataRow是属于其他DataTable的,那要怎么做呢?很简单,这样就可以解决了:

1 DataTable dtNew = dt.Clone();
2 for (int i = 0; i < drArr.Length; i++)
3 {
4     dtNew.ImportRow(drArr[i]);
5
6 }

补充一下,还可以利用DataView来达到检索的目的。

 1 DataTable dataSource = new DataTable();
 2 DataView dv = dataSource.DefaultView;
 3 dv.RowFilter = "columnA = ‘abc‘";
 4
 5 //1.过滤后直接获取DataTable
 6 DataTable newTable1 = dv.ToTable();
 7
 8 //2.设置新DataTable的TableName
 9 DataTable newTable2 = dv.ToTable("NewTableName");
10
11 //3.设置新表是否过滤重复项,拥有的列的列名以及出现的顺序
12 //即可以设置新表的字段。但是字段名肯定是老表dataSource中拥有的。
13 DataTable newTable3 =
14 dv.ToTable(true, new string[] { "columnA,columnF,columnC" });
15
16 //4.综合了2.3两点。
17 DataTable newTable4 =
18 dv.ToTable("NewTableName", true, new string[] { "columnA,columnF,columnC" });

时间: 2024-11-05 16:36:00

筛选DataTable中数据的方法的相关文章

C#中DataTable中的Compute方法使用收集

原文: C#中DataTable中的Compute方法使用收集 Compute函数的参数就两个:Expression,和Filter. Expresstion是计算表达式,关于Expression的详细内容请看这里“http://msdn2.microsoft.com/zh-cn/library/system.data.datacolumn.expression(VS.80).aspx”.而Filter则是条件过滤器,类似sql的Where条件. DataTable dt = new DataT

DataView.RowFilter筛选DataTable中的数据

//定义一个DataView ,得到一个全部职员的视图DataView dataView1 = DbHelperSQL.QueryDataView(sql); //过滤得到一个只显示男职员的视图 dataView1.RowFilter = " sex='男' "; //放弃过滤,现在仍然能够得到一个全部职员的视图dataView1.RowFilter = null; //现在过滤得到一个只显示女职员的视图 dataView1.RowFilter = " sex='女' &qu

R读写Excel文件中数据的方法

用R语言读写Excel的方法有很多,但每种方法都有让人头疼的地方,比如xlsx包的代码复杂,只支持Excel2007:RODBC不易理解,限制太多,程序不稳定,会出各种怪毛病.另存为csv格式的方法倒是比较通用比较稳定,但又存在操作麻烦,无法程序化处理多个文件的问题.提取xml也是个办法,但步骤太多代码太复杂,令人望而生畏.用剪贴板转换也不好,这同样需要人工参与,还不如存为csv. 相比之下,用gdata包来读取,配合WriteXLS写入Excel则可以很好的避开上述麻烦.这两个包都支持Exce

删除表及删除表中数据的方法

本文介绍SQL Server中如何删除表,如何删除表中的数据.在删除表数据时有delete和truncate两种方法,delete和truncate有什么区别呢? SQL Server,我们现在基本上使用的最古老的版本应该是SQL Server 2000吧,应该没有更早的版本了吧?!从SQL Server 2000开始,到SQL Server 2005,2008,2012等,T-SQL的处理能力越来越强.今天我们就来说说如何使用T-SQL脚本来删除表,以及删除表中的数据. 删除表和删除表数据这是

linux抓取top命令中数据的方法

top在linux中是一个非常直观的命令,可以清晰地看到各进程对资源的使用情况. ? 但是如果你想从top命令展示中提取某些数据出来,如果想当然地使用这句命令: top|grep xxx 就会被卡住,欲哭无泪. ? 我们不妨查一下top这个命令,看看是否有其他办法来把数据抓出来. ? 首先简单了解一下top这个命令. ? top是linux的一个性能分析工具,类似于windows的任务管理器.其最大特点有两个:动态.直观地显示进程占用资源情况. 执行top的时候,会在前台默认打开一个termin

&lt;转&gt; C#中DataTable中的Compute方法使用收集

Compute函数的参数就两个:Expression,和Filter. Expresstion是计算表达式,关于Expression的详细内容请看这里“http://msdn2.microsoft.com/zh-cn/library/system.data.datacolumn.expression(VS.80).aspx”.而Filter则是条件过滤器,类似sql的Where条件. [csharp] view plaincopyprint? DataTable dt = new DataTab

DataTable中数据针对某列数据去重

//针对这些数据进行去重,取某一列就用这一列字段,把重复的去掉 DataSet ds = dao.get(); DataTable dt = ds.Table[0] DataView dv = dt.DefaultView; DataTable dt1 = dv.ToTable(true, "IADDDTIME"); for (int g = 0; g < dt1.Rows.Count; g++) { DateTime ITAADDDTIME = Convert.ToDateTi

C#将datatable中数据导出到excel

using Excel = Microsoft.Office.Interop.Excel;//添加 Microsoft.Office.Interop.Excel.dll 引用 class ExcelManager { public delegate void ProgressBarEventHandler(int max, int value);//导出进度条所需最大值与进度值 public event ProgressBarEventHandler ProgressBarEvent; publ

清空SQL Server数据库中所有表数据的方法

其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入死循环,二是这里使用了微软未正式公开的sp_MSForEachTable存储过程. 也许很多读者朋友都经历过这样的事情:要在开发数据库基础上清理一个空库,但由于对数据库结构缺乏整体了解,在删除一个表的记录时,删除不了,因为可能有外键约束,一个常见的数据库结构是一个主表,一个子表,这种情况下一般都得先删除子表记录,再删除主表记录. 说道删除数据记录,