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

时间:2009-11-19 22:05:22

标签: c# datatable

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

6 个答案:

答案 0 :(得分:36)

您可以使用Compute方法,如下所示:

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

或者,您可以使用LINQ:

if (table.AsEnumerable().All(dr => dr.IsNull("ColumnName")))
    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);
}

您需要调用ToArray,因为循环将修改集合。

答案 1 :(得分:2)

你清除datatable中的所有列。你就这样使用。

datatable.Columns.Clear();

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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();
}

答案 4 :(得分:0)

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();           
    }

答案 5 :(得分:-1)

foreach (var column in dtFinancialOpHistory.Columns.Cast<DataColumn().ToArray())
{
    if (dtFinancialOpHistory.AsEnumerable().All(dr => dr[column.ColumnName].Equals("")))
    {
     dtFinancialOpHistory.Columns.Remove(column);
    }
}