获取从数据集到数据表的筛选数据
本文关键字:筛选 数据 数据表 数据集 获取 | 更新日期: 2023-09-27 18:32:08
如何将数据集中的数据筛选到数据表?就像代码>
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();
}
可以使用上面的过滤器删除列,例如"STAGENAME='Develop' AND DEVLAPSEDAYS 不为空" + FilteredDataD.column("col_name")...假设我有 5 列只显示 4 列,我无法从查询中删除col_name。有办法吗?
答
尝试改用 LINQ:
var table = DS.Tables[0].AsEnumerable().Where(
r => r.Field<string>("STAGENAME") == "Develop" && r.Field<int?>("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");