从数据集中获取过滤后的数据到数据表

如何将数据集中的数据过滤到数据表? 喜欢代码 – >

DataRow[] dr = DS.Tables[0] .Select("STAGENAME='Develop' AND DEVLAPSEDAYS IS NOT NULL"); 

我如何在这里使用数据表?

以下代码并不反映更改 – >

 DataTable FilteredDataD = DS.Tables[0]; if (FilteredDataD.Rows.Count > 0) { FilteredDataD.DefaultView.RowFilter = "STAGENAME='Develop' AND DEVLAPSEDAYS IS NOT NULL"; FilteredDataD.DefaultView.ToTable(); } 

是否可以使用上面的filter删除列,例如“STAGENAME =’Develop’和DEVLAPSEDAYS IS NOT NULL”+ FilteredDataD.column(“col_name”)…假设我有5列只显示4,我不能删除我的查询中的col_name。有办法吗?

答复

尝试使用LINQ代替:

 var table = DS.Tables[0].AsEnumerable().Where( r => r.Field("STAGENAME") == "Develop" && r.Field("DEVLAPSEDAYS").HasValue).AsDataView().ToTable(); 

编辑AsDataView更改为AsDataView()以获得语法准确性。
编辑提供了.NET 2.0兼容的解决方案

 DataTable table = DS.Tables[0]; if (table.Rows.Count > 0) { table.DefaultView.RowFilter = "STAGENAME = 'DEVELOP' AND DEVLAPSEDAYS IS NOT NULL"; table = table.DefaultView.ToTable(); } 

您可以编写一个扩展方法(使用C#3),如下所示:

 public static DataTable Filter(this DataTable dataTable, string selectFilter) { var filteredTable = dataTable.Clone(); var rows = dataTable.Select(selectFilter).ToList(); rows.ForEach(filteredTable.ImportRow); return filteredTable; } 

然后使用它如下:

 DataTable dataTable = DS.Tables[0] .Filter("STAGENAME='Develop' AND DEVLAPSEDAYS IS NOT NULL"); 

更新 ,因为你说你正在使用C#2.0(因此扩展方法和LINQ不是一个选项)你可以使用它:

 public static DataTable GetFilteredTable( DataTable sourceTable, string selectFilter) { var filteredTable = sourceTable.Clone(); var rows = sourceTable.Select(selectFilter); foreach (DataRow row in rows) { filteredTable.ImportRow(row); } return filteredTable; } DataTable dataTable = GetFilteredTable( DS.Tables[0], "STAGENAME='Develop' AND DEVLAPSEDAYS IS NOT NULL");