¿Cuál es la mejor manera de eliminar múltiples registros de una sola vez con LINQ?¿La mejor manera de eliminar múltiples registros en una consulta LINQ?
Respuesta
Los buenos viejos sprocs .....
puede arrastrar el sproc a su archivo DBML y generará un método rico en su clase DatabaseContext.
para eliminar registros con Linq2Sql
CustomerDataContext ctx = new CustomerDataContext("connection string"); var customers = ctx.Customers.Where(c => c.Name == "david"); ctx.Customers.DeleteAllOnSubmit(customers); ctx.SubmitChanges();
Esta es una de las maneras más fáciles pero no diría que es la más eficiente. En realidad, no se está realizando ninguna optimización. El SQL generado enumera todos los objetos que coinciden con su consulta, y luego itera manualmente sobre ellos para eliminarlos. Ver este post - http://stackoverflow.com/questions/869209/bulk-deleting-via-linq – David
Si no está utilizando LINQ to SQL, consulte http://stackoverflow.com/q/1781175/24267 – mhenry1384
No se puede convertir implícitamente el tipo 'System.Linq.IQueryable
Las siguientes es más para LINQ a Entidades, pero puede ayudar:
quizá su Litle tarde a esta respuesta, pero hoy me encontré con esta demanda yo mismo y yo le ocurrió esta solución
CustomerDataContext ctx = new CustomerDataContext("connection string");
ctx.Customers.DeleteAllOnSubmit(ctx.Customers.Where(c => c.Name == "david"));
ctx.SubmitChanges();
Seguramente no puede afirmar haber 'aparecido' con esa solución cuando todo lo que hizo fue mover la declaración de 'cust' de la respuesta más popular al método 'DeleteAllOnSubmit'. – Sheridan
Estoy de acuerdo con Khurram, que es mucho más eficiente de hacer esto con un procedimiento almacenado sencilla con LINQ (siempre que tenga suficientes permisos en SQL para hacer esto). Aumentaré esto con un ejemplo.
El procedimiento almacenado:
CREATE PROCEDURE [dbo].[RemovePermissionsFromRole]
(
@ROLE_ID int
)
AS
BEGIN
SET NOCOUNT ON;
DELETE FROM [RolePermissions] WHERE [RoleID] = @ROLE_ID;
END
Arrastre el procedimiento almacenado desde el explorador de la base de datos sobre los métodos de panel en su archivo DBML. Guarda el archivo. Y en el código:
if (Request.QueryString["RoleID"] != null) {
int roleID = Convert.ToInt32(Request.QueryString["RoleID"]);
SETSDataContext context = new SETSDataContext();
context.RemovePermissionsFromRole(roleID);
}
Usando marco de la entidad 6
// Database context
EntitiesContext db = new EntitiesContext(connString);
// Select all the records to be deleted
IEnumerable<entity> list = db.entity.where(x=>x.id == id).toList();
// Use Remove Range function to delete all records at once
db.entity.RemoveRange(list);
// Save changes
db.SaveChanges();
Extracción muchos registros basado en una sola cláusula where
context.EntityModel
.RemoveAll(r => r.property == "propertyEntered");
Pero también se puede eliminar registros de la base de datos que no lo hacen existe en List<ListOfBadRecords>
context.EntityModel
.Where(w => w.propertyID == ID).ToList()
.RemoveAll(r => !ListOfBadRecords.Any(a => a.anyID == r.propertyID));
Editar:
Sin saber cual es más rápido, pero se podía hacer la consulta con este segundo también
.RemoveAll(r => !ListOfBadRecords.Select(s=>s.propertyID).Contains(w.propertyID))
Edit2: no se olvide context.SaveChanges();
como lo hice en el primer borrador
Aquí es cómo resolví el problema:
try
{
List<MaterialPartSerialNumber> list = db.MaterialPartSerialNumbers.Where(s => s.PartId == PartId && s.InventoryLocationId == NewInventoryLocationId && s.LocationId == LocationId).ToList();
db.MaterialPartSerialNumbers.RemoveRange(list);
db.SaveChanges();
}
catch(Exception ex)
{
string error = ex.Message;
}
Primero, usted puede encontrar una lista o f los elementos que desea eliminar.
Luego, puede usar la función RemoveRange(**list_of_item_to_delete**)
para que elimine cada instancia en la lista presente en la base de datos.
De acuerdo con MSDN, el método elimina un rango de elementos de la lista.
Para obtener más información, consulte aquí https://msdn.microsoft.com/en-us/library/y33yd2b5(v=vs.110).aspx
pls explica por qué funciona, no solo publique el código como respuesta –
Esto es lo que he usado, primero crea un objeto IEnumerable de la mesa donde están los registros que se deben eliminar son, a continuación, sólo tiene que utilizar removeRange, y, finalmente, acaba de guardar los cambios en base de datos. Supongamos que desea eliminar todos los productos de una ID de proveedor específica en la tabla Productos, así es como podría hacerlo.
IEnumerable ProductsToRemove = db.Products.Where (x => x.SupplierId == Supplierid); db.Products.RemoveRange (ProductsToRemove); db.SaveChanges();
- 1. Haciendo una consulta LINQ mejor
- 2. Eliminar consulta en Linq
- 3. ¿Cuál es la mejor manera de pasar múltiples parámetros de consulta a una api relajante?
- 4. Eliminación de múltiples registros con Entity Framework usando una sola consulta LINQ
- 5. de consulta MERGE y eliminar registros
- 6. consulta LINQ con múltiples agregados
- 7. LINQ consulta para seleccionar registros superiores
- 8. ¿Cómo eliminar múltiples registros en el marco de entidad sin bucles usando LINQ?
- 9. Hibernar: la mejor manera de eliminar elementos en una colección
- 10. La mejor manera de unirse a Linq
- 11. La mejor manera de actualizar en Linq a SQL
- 12. La mejor manera de eliminar elementos de una colección
- 13. Eliminar múltiples registros por lista de identificadores con declaración HQL
- 14. LINQ to SQL: Eliminar entidad (por ID) con una consulta
- 15. Cómo eliminar documentos por consulta de manera eficiente en mongo?
- 16. Recuento de registros en C# utilizando LINQ
- 17. fechas en consulta utilizando LINQ
- 18. La mejor manera de ordenar una matriz
- 19. ¿La mejor manera de manejar múltiples UITableViews en un UIViewController?
- 20. InvalidCastException en una consulta LINQ
- 21. ¿Hay una mejor manera de dividir esta cadena usando LINQ?
- 22. Eliminar registros duplicados de la vista
- 23. ¿La mejor manera de encontrar la intersección de conjuntos múltiples?
- 24. Symfony - actualizar múltiples registros
- 25. Linq - Usando una matriz en la expresión Lambda para recuperar múltiples registros
- 26. La mejor manera de insertar una buena cantidad de registros en hibernación
- 27. mejor manera de manejar múltiples NSTableView (s)
- 28. ¿Cómo ejecutar una consulta de actualización/eliminación masiva en Linq?
- 29. ¿Cuál es la mejor manera de eliminar toda una tabla grande en t-sql?
- 30. consulta de linq a sql con múltiples donde los parámetros
Si necesita hacer algo como 'DELETE FROM table WHERE ...' entonces considere usar SQL. LINQ puede no ser la mejor herramienta para este trabajo. – Myster