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

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

您可以使用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().ToArray()) { if (table.AsEnumerable().All(dr => dr.IsNull(column))) table.Columns.Remove(column); } 

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

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

datatable.Columns.Clear();

 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 
 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().ToArray()) { if (table.AsEnumerable().All(dr => dr.IsNull(column))) table.Columns.Remove(column); } table.AcceptChanges(); } 
 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(); }