multiple library framework extended delete c# .net ado.net datatable datarow

c# - library - delete multiple rows entity framework



¿Cómo eliminar varias filas en un DataTable? (10)

¿Cómo puedo eliminar las DataRows específicas dentro de un bucle de una fila DataTable que cumple con una condición personalizada (las filas dicen que tienen un índice de número par)? (Sin usar LINQ)

Gracias


Así es como lo hice cuando me topé con este problema.

Dim index As Integer = 0 Dim count As Integer = resultsDT.Rows.Count - 1 For i As Integer = 0 To count If resultsDT.Rows(index).Item("something") = "something" Then resultsDT.Rows(index).Delete() resultsDT.AcceptChanges() index = index - 1 End If index = index + 1 i = i + 1 Next


La otra forma es

DataRow[] DrArrCheck = DataTableName.Select("ID > 0"); foreach(DataRow DrCheck in DrArrCheck) { DataTableName.Rows.Remove(DrCheck); }


Para eliminar varias filas (por ejemplo, 50,000 de 100,000) es mucho más rápido copiar la base de datos que hacer datatable.Rows.Remove (row) o row.Delete (). Por ejemplo:

DataRow[] rowsToKeep = datatable.Select("ID > 50000"); DataTable tempDataTable= rowsToKeep.CopyToDataTable; dataTable.Clear(); dataTable.Merge(tempDataTable); tempDataTable.Dispose();


Prueba algo como este ejemplo

DataTable table = new DataTable(); table.Columns.Add("Foo",typeof(int)); for (int i = 0; i < 10; i++) table.Rows.Add(i); for (int i = table.Rows.Count -1; i >=0; i--) { // sample removes all even foos if ((int)table.Rows[i]["Foo"] % 2 == 0) table.Rows.RemoveAt(i); }


Si desea una solución más corta que las propuestas anteriormente, intente hacer un bucle sobre la lista de resultados y usar un lambda como sub(x) para eliminar cada una de esas filas.

dt.Select("Column1 > 0").ToList.ForEach(Sub(x) dt.Rows.Remove(x))


Siempre usé el enfoque de "dos fases" de LBushkin y finalmente decidí que valía la pena escribir una función para él:

public delegate bool DataRowComparer(DataRow dr); public static void RemoveDataRows(DataTable table, DataRowComparer drc) { List<DataRow> RowsToRemove = new List<DataRow>(); foreach (DataRow dr in table.Rows) if (drc(dr)) RowsToRemove.Add(dr); foreach (DataRow dr in RowsToRemove) table.Rows.Remove(dr); }

Y ahora puedo eliminar filas con una línea de código (por ejemplo):

RemoveDataRows(dt, row => row["StringVal"].ToString() == "B" && (Int16)(row["NumberVal"]) >= 4);

En caso de que esto ayude a alguien ...

(Y se aprecia cualquier forma de abreviar más.)


intente iterar sobre el resultado de Select (). Esto es bastante similar a otras respuestas, pero me parece la más directa.

DataRow[] r = table.Select(); for (int i = 0; i < r.Length; i++) { if (i % 2 == 0) r[i].Delete(); }


prueba esto

foreach(DataRow oRow in YourDataTable.Rows) { if ("Check You Condition") { YourDataTable.Rows.Remove(oRow); } }


Depende de lo que quieras decir con ''eliminar''.

Si quiere marcarlos como eliminados , simplemente llame al método Delete() en cada fila mientras lo visita en su bucle. A continuación, debe llamar a AcceptChanges() en la tabla de datos para finalizar la eliminación, probablemente después de actualizar su base de datos (si hay alguna).

foreach( DataRow row in someTable.Rows ) { if( /* your condition here */ ) row.Delete(); } someTable.AcceptChanges();

Si quiere eliminarla de la tabla de datos, debe hacerlo en dos pasos:

List<DataRow> rowsToDelete = new List<DataRow>(); foreach( DataRow row in someTable.Rows ) { if( /* your condition here */ ) { rowsToDelete.Add( row ); } } foreach( DataRow row in rowsToDelete ) { someTable.Rows.Remove( row ); }

Vale la pena señalar que siempre puede usar el primer método para eliminar filas, ya que marcar filas como Deleted y luego aceptar los cambios las eliminará automáticamente de la tabla. Pero, a veces es más claro y eficiente simplemente eliminar DataRow objetos DataRow de la colección Rows .


public static void DeleteRowsFromDataTable(DataTable dataTable, string columnName, string columnValue) { IEnumerable<DataRow> dataRows = (from t in dataTable.AsEnumerable() where t.Field<string>(columnName) == columnValue select t); foreach (DataRow row in dataRows) dataTable.Rows.Remove(row); }