C# 从DataTable中删除没有数据的所有列

C# 从DataTable中删除没有数据的所有列,c#,datatable,C#,Datatable,如果某个特定列的所有项都为空,我想从DataTable中删除该列。对DataTable中的所有列执行此操作最优雅的方法是什么?您可以使用以下方法: if (table.Compute("COUNT(ColumnName)", "ColumnName <> NULL") == 0) table.Columns.Remove("ColumnName"); 编辑:完整回答问题: foreach(var column in table.Columns.Cast<DataCo

如果某个特定列的所有项都为空,我想从DataTable中删除该列。对DataTable中的所有列执行此操作最优雅的方法是什么?

您可以使用以下方法:

if (table.Compute("COUNT(ColumnName)", "ColumnName <> NULL") == 0)
    table.Columns.Remove("ColumnName");

编辑:完整回答问题:

foreach(var column in table.Columns.Cast<DataColumn>().ToArray()) {
    if (table.AsEnumerable().All(dr => dr.IsNull(column)))
        table.Columns.Remove(column);
}
foreach(table.Columns.Cast().ToArray()中的var列){
if(table.AsEnumerable().All(dr=>dr.IsNull(column)))
表.列.删除(列);
}
您需要调用
ToArray
,因为循环将修改集合。

私有静态无效删除未使用的列和行(DataTable)
Function RemoveEmptyColumns(Datatable As DataTable) As Boolean
    Dim mynetable As DataTable = Datatable.Copy
    Dim counter As Integer = mynetable.Rows.Count
    Dim col As DataColumn
    For Each col In mynetable.Columns
        Dim dr() As DataRow = mynetable.Select(col.ColumnName + " is   Null ")
        If dr.Length = counter Then
            Datatable.Columns.Remove(col.ColumnName)
            Datatable.AcceptChanges()
        End If
    return true
end function
{ for(int h=0;hdr.IsNull(column))) 表.列.删除(列); } 表.AcceptChanges(); }
您可以清除datatable中的所有列。您可以这样使用

datatable.Columns.Clear()

foreach(dtfinancialphistory.Columns.Cast dr[column.ColumnName].Equals(“”)中的var列)
{
DTFinancialPhysitory.Columns.Remove(列);
}
}

不错。调整代码以检查所有列名,您将得到绿色的复选标记。可能;-)。实际上我已经自己实现了。只是不想将其标记为正确,因为它没有完全回答最初的问题。我的DataTable有许多行。其中一行包含一个特定的strint,如=“Container”。我想删除容器字符串的上述所有行,你能展示一些语法吗?如果行中的第1列为DBNULL,那么肯定会删除整行。不完全是OP所要的。这将清除所有不是用户要求的列。传递列名((dr=>dr[column.ColumnName].Equals(“”))以检查空值。
Function RemoveEmptyColumns(Datatable As DataTable) As Boolean
    Dim mynetable As DataTable = Datatable.Copy
    Dim counter As Integer = mynetable.Rows.Count
    Dim col As DataColumn
    For Each col In mynetable.Columns
        Dim dr() As DataRow = mynetable.Select(col.ColumnName + " is   Null ")
        If dr.Length = counter Then
            Datatable.Columns.Remove(col.ColumnName)
            Datatable.AcceptChanges()
        End If
    return true
end function
public static void RemoveNullColumnFromDataTable(DataTable dt)
{
    for (int i = dt.Rows.Count - 1; i >= 0; i--)
    {
        if (dt.Rows[i][1] == DBNull.Value)
            dt.Rows[i].Delete();
    }
    dt.AcceptChanges();
}
private static void RemoveUnusedColumnsAndRows(DataTable table)
    {            
        for (int h = 0; h < table.Rows.Count; h++)
        {
            if (table.Rows[h].IsNull(0) == true)
            {
                table.Rows[h].Delete();
            }
            enter code here
        }
        table.AcceptChanges();
        foreach (var column in table.Columns.Cast<DataColumn>().ToArray())
        {
            if (table.AsEnumerable().All(dr => dr.IsNull(column)))
                table.Columns.Remove(column);
        }
        table.AcceptChanges();           
    }
foreach (var column in dtFinancialOpHistory.Columns.Cast<DataColumn().ToArray())
{
    if (dtFinancialOpHistory.AsEnumerable().All(dr => dr[column.ColumnName].Equals("")))
    {
     dtFinancialOpHistory.Columns.Remove(column);
    }
}