DataTable筛选符合条件的DataRow
DataTable中筛选row,在.net framework3.5和4.0中因为有linq,所以会有比较容易,相对的,在framework2.0中,稍显笨拙了点,不过同样很好用。就是使用DataTable.Select()方法,具体定义如下: public DataRow[] Select (string filterExpression,string sort) ex:DataRow[] rows=dt.Select("name like '%jake%'","age desc"); 筛选出行集合之后,就是要将行集合导入到一个新的DataTable中去。 步骤如下: 1.DataTable dtNew=dt.Clone();新的dtNew和dt具有同样的架构和约束 2.此处需要注意,不能用foreach或for循环的方式将新的rows集合添加到dtNew中,会提示报错,说行是属于其他的DataTable,使用另外一个方法可以实现。 for(int i=0;i<rows.Length;i++) { dtNew.ImportRow(rows[i]); } 查询MSDN,会发现该方法的定义:将 DataRow 复制到 DataTable 中,保留任何属性设置以及初始值和当前值。 备注:调用 NewRow 时,将使用现有的表架构向表中添加一行,并为该行填充默认值,同时将 DataRowState 设置为 Added。 调用 ImportRow 将保留现有的 DataRowState 以及该行中的其他值。 |
--------------------------------------------------MSDN-----------------------------------------------
private void GetRowsByFilter()
{
DataTable table = DataSet1.Tables["Orders"];
// Presuming the DataTable has a column named Date.
string expression;
expression = "Date > #1/1/00#";
DataRow[] foundRows;
// Use the Select method to find all rows matching the filter.
foundRows = table.Select(expression);
// Print column 0 of each returned row.
for(int i = 0; i < foundRows.Length; i ++)
{
Console.WriteLine(foundRows[i][0]);
}
}
Select()()() 获取所有 DataRow 对象的数组。
Select(String) 按照主键顺序(如果没有主键,则按照添加顺序)获取与筛选条件相匹配的所有 DataRow 对象的数组。
Select(String, String) 获取按照指定的排序顺序且与筛选条件相匹配的所有 DataRow 对象的数组。
Select(String, String, DataViewRowState) 获取与排序顺序中的筛选器以及指定的状态相匹配的所有 DataRow 对象的数组。