问题还原,如图所示,我们要筛选所有SHDP 为北京翠微KR的数据。
1、 筛选DataTable微软为我们提供了一个方法DataTable.Select(),其用法如下:
1) Select()——获取所有 System.Data.DataRow 对象的数组;
2) Select(string filterExpression)——按照主键顺序(如果没有主键,则按照添加顺序)获取与筛选条件相匹配的所有 System.Data.DataRow 对象的数组;
3) Select(string filterExpression, string sort)——获取按照指定的排序顺序且与筛选条件相匹配的所有System.Data.DataRow 对象的数组;
4) Select(string filterExpression, string sort, DataViewRowState recordStates)——获取与排序顺序中的筛选器以及指定的状态相匹配的所有。
举例说明:
有一个用户表,名称为 dtUsers,有id、姓名name、性别sex、年龄age
1.筛选所有的用户
DataRow[] drs1 =dtUsers.Select();
2.筛选所有性别为男的用户
DataRow[] drs2 =dtUsers.Select("sex = '男' ");
3.筛选所有性别为男且年龄在18岁以上的用户
DataRow[] drs3 =dtUsers.Select("sex = '男' and age >= 18");
4.筛选所有性别为男或者年龄在18岁以上的用户
DataRow[] drs4 =dtUsers.Select("sex = '男' or age >= 18");
5.筛选所有姓“夏”的用户
DataRow[] drs5 =dtUsers.Select("name like '夏%'");
6.筛选所有18岁以上的用户且按从大到小的顺序排序
DataRow[] drs5 =dtUsers.Select("age >=18","age desc");
代码如下:
1 //查询结果数据集 2 DataSet ds = bll.GetDPCCSBList(pageNum, pageSize, whereStr, out totalRecord); 3 //通过Select查询返回DataRow[] 4 DataRow[] rows = ds.Tables[0].Select($"SHDPDM='{jobnum}'"); 5 //DataRow[]转为DataTable 6 DataTable dtResult = ToDataTable(rows); 7 //将Table添加到DataSet 8 DataSet dsResult = new DataSet(); 9 dsResult.Tables.Add(dtResult);
DataRow[]转为dataTable
1 /// <summary> 2 /// DataRow[]转为dataTable 3 /// </summary> 4 /// <param name="rows"></param> 5 /// <returns></returns> 6 public DataTable ToDataTable(DataRow[] rows) 7 { 8 if (rows == null || rows.Length == 0) return null; 9 DataTable tmp = rows[0].Table.Clone(); // 复制DataRow的表结构 10 foreach (DataRow row in rows) 11 tmp.Rows.Add(row.ItemArray); // 将DataRow添加到DataTable中 12 return tmp; 13 }
筛选后的结果: