DataTable 筛选数据

//使用聚合函数 max ,sum  ,count ....

private void ComputeBySalesSalesID(DataSet dataSet)

{

    // Presumes a DataTable named "Orders" that has a column named "Total."

    DataTable table;

    table = dataSet.Tables["Orders"];

    // Declare an object variable.

    object sumObject;

    sumObject = table.Compute("Sum(Total)""EmpID = 5");

}

//使用select  .....

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

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]);

}

时间: 2024-11-07 05:08:34

DataTable 筛选数据的相关文章

DataTable 筛选数据,弃用Select()方法

筛选出 2012-2-1 的数据 private DataTable GetData() { DataTable dt = new DataTable(); dt.Columns.Add("Id", typeof(int)); dt.Columns.Add("Time", typeof(string)); dt.Rows.Add(1, "2012-2-1"); dt.Rows.Add(2, "2012-2-2"); dt.Ro

DataTable筛选数据将筛选后的值赋值给其他DataSet

datatable转dataView进行过滤 //将获取到类别作为源数据进行筛选后赋值给要返回的dataset DataTable dataSource = dsChildId.Tables[0]; DataView dv = dataSource.DefaultView; //根据父id进行筛选 //如果为空说明只是一个小类的节点那么必定属于一个大类 dv.RowFilter = "EMERGENCY_CATEGORY_FATHER_ID = 0"; DataTable newTab

easyui 筛选数据及仅允许选择数据

先说需求,本地已缓存数据源,用户输入拼音码或编号,筛选数据作为新的数据源,然后通过键盘选择. 再说问题,easyui combogrid控件,在mode为local,也就是将数据源缓存在本地的情况下,一般情况下,是通过 filter:function(q,row){ var opts=$(this).options; return row[opts.textField].indexOf(q)>-1; } 官网api也有介绍,但是在实际项目中有两个问题: 数据量较大,每次筛选很慢. 不知道是不是数

Winform开窗,筛选数据后返回数据的方法

在开发中,经常需要打开另一个窗体(简写为"开窗"),然后在开窗中进行数据筛选,选中需要的数据,最后将值传递给本原来的窗体.而且,这个开窗可以重复用于多个地方,其效果如同日历控件的弹出窗口.如下图所示: 测试环境 vs2008 基本思路 1.创建一个窗体类. (1)为该类添加用于传递值的属性. (2)为该类添加一个事件,用于通知调用方值已经准备好. (3)在窗体类的某个函数中,如单元格双击处理函数中,为属性赋值,并引发这个事件. 2.调用该窗体类. (1)定义一个全局的窗体类对象. (2

python_如何在列表、字典中筛选数据?

实际问题有哪些? 过滤掉列表[3,9,-1,10.-2......] 中负数 筛选出字典{'li_ming':90,'xiao_hong':60,'li_kang':95,'bei_men':98} 中值高于90的项 筛选出集合{3,9,-1,10.-2......]中能被3整除的数 问题1如何解决? 最普通方法: #!/usr/bin/python3 def filter_l(data): res = [] for i in data: if i > 0: res.append(i) retu

去除DataTable重复数据的三种方法

其中要避免目标库插入重复数据.这重复数据可能是源数据库本身就有重复数据,还有就是已经插入避免重复插入. 过滤自身重复数据解决方案 第一种:采用DataView.ToTable()方法 DataView.ToTable 方法 .NET Framework 2.0 其根据现有 DataView 中的行,创建并返回一个新的 DataTable. 重载列表 名称 说明 DataView.ToTable () 根据现有 DataView 中的行,创建并返回一个新的 DataTable. 由 .NET Co

python基础一 -------如何在列表字典集合中根据条件筛选数据

如何在列表字典集合中根据条件筛选数据 一:列表 先随机生成一个列表,过滤掉负数 1,普通for循环迭代判断 2,filter()函数判断,filter(函数,list|tuple|string) 1 filter(lambda x:x>0,data) 3,列表推倒式 4,效率对比:还是列表推导式稍高 二:字典 1,跟列表类似,推导式 先生成随机的字典(key从1-20) 过滤掉value是负数的值 三:集合 随机生成10个元素的集合 过滤掉小于0的元素,跟字典类似

使用EditText+ListView并结合TextWatcher实现输入关键字筛选数据

想必大家应该遇到过这样的情况,当点击Spinner控件后弹出的列表内容超多,一个一个滑动着去寻找所要的项很麻烦,尤其是当自己知道想要选择的内容,这时候如果我们只需要输入某些关键字,就可以讲上百条数据筛选出几十条甚至更少,岂不是会方便很多. 其实这是项目中的一个需求,由于目前公司接触的多数和数据采集相关的PDA项目,有很多填写项一个spinner已经不方便满足需求,虽然客户还没有提 出,但提前做好优化总是没有错的,所以项目组的同事提出这个需求并让我尝试着去做出来,当中给了我不少帮助和意见. 闲言少

使用反射将DataTable的数据转成实体类

利用反射避免了硬编码出现的错误,但是实体类的属性名必须和数据库名字对应(相同) 1.利用反射把DataTable的数据写到单个实体类 1 /// <summary> 2 /// 利用反射把DataTable的数据写到单个实体类 3 /// </summary> 4 /// <typeparam name="T"></typeparam> 5 /// <param name="dtSource"></p