获取从数据集到数据表的筛选数据

本文关键字:筛选 数据 数据表 数据集 获取 | 更新日期: 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");
相关文章: