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