首页 文章

使用linq根据where条件从DataTable中删除列

提问于
浏览
-1

我有一个包含许多dataTable的数据集 .

数据表如下所示,

column1  column2 column3  Name
     NA        NA      NA    Ivan

现在我想从数据集中删除行值为“NA”的所有数据表中的列 .

如果可能的话,如何使用Linq执行此操作?

2 回答

  • 1

    我想你实际上想要删除所有行的所有字符串列,其中所有行的所有值都是 NA (或 na ) . 然后这按预期工作:

    foreach (DataTable table in ds.Tables)
    {
        List<DataColumn> stringColumns = table.Columns.Cast<DataColumn>()
            .Where(c => c.DataType == typeof(string))
            .ToList();
        var columnsAllNotAvailable = stringColumns
            .Where(c => table.AsEnumerable()
                .All(r =>  String.Equals(r.Field<string>(c), "NA", StringComparison.InvariantCultureIgnoreCase)));
        foreach(DataColumn col in columnsAllNotAvailable)
            table.Columns.Remove(col);
    }
    
  • 0

    您可以通过方法Remove删除collecion中的列,linq只能帮助您找到所需的列 . 找到所需的列,然后将其删除 .

    var dt = new DataTable();
                List<DataColumn> delete = new List<DataColumn>();
                foreach (DataRow row in dt.Rows)
                    foreach (DataColumn col in dt.Columns)
                        if (row[col]?.ToString() == "NA" && !delete.Contains(col))
                            delete.Add(col);
                foreach (var col in delete)
                    dt.Columns.Remove(col);
    

相关问题