¿Hay alguna manera de hacer una actualización masiva en una colección con LINQ? Actualmente, si tengo un List<myObject>
y quiero actualizar la columna 1 para que sea igual a PRUEBA para cada fila en la Lista, configuraría un ciclo foreach y luego, para cada objeto individual, establecería el valor y luego lo guardaría. Esto funciona bien, pero me preguntaba si había algún método LINQ que pudiera hacer algo como myOject.BulkUpdate(columnName, value)
.Actualización masiva con LINQ to SQL
Respuesta
Parece que está utilizando LINQ To SQL, y ya tiene los principios básicos establecidos.
LINQ To SQL se trata de abstraer tablas en clases, y realmente no proporciona la "bala de plata" o una línea que está buscando.
La única manera de hacerlo es lograr que su línea sea hacer que un proceso almacenado tome el nombre de esa columna y el nuevo valor, e implemente esa lógica usted mismo.
db.MassUpdateTableColumn("Customer", "Name", "TEST");
....
CREATE PROC MassUpdateTableColumn
@TableName varchar(100), @ColumnName varchar(100), @NewVal varchar(100)
AS
/*your dynamic SQL to update a table column with a new val. */
lo contrario, es como usted la describe:
List<Customer> myCusts = db.Customers.ToList();
foreach(Customer c in myCusts)
{
c.Name = "TEST";
}
db.SubmitChanges();
Sí, entiendo cómo hacer esto. Mi pregunta es solo preguntar si hay una función LINQ que esté más optimizada. – esastincy
LINQ a SQL (o EF para el caso), es todo acerca de llevar objetos en la memoria, manipularlos, y luego actualizarlos con solicitudes de bases de datos separadas para cada fila.
En los casos donde no es necesario hidratar todo el objeto en el cliente, es mucho mejor usar las operaciones del lado del servidor (procs almacenados, TSQL) en lugar de LINQ. Puede usar los proveedores de LINQ para emitir TSQL contra la base de datos. Por ejemplo, con LINQ to SQL puede usar context.ExecuteCommand ("Actualizar campo de conjunto de tablas = valor donde condición"), solo tenga cuidado con SQL Injection.
Su requisito aquí es completamente posible utilizando expresiones Linq y la excelente biblioteca de Terry Aney sobre este tema.
Batch Updates and Deletes with LINQ to SQL
una actualización en los términos del ejemplo que diste sería la siguiente:
using BTR.Core.Linq;
...
Context.myObjects.UpdateBatch
(
Context.myObjects.Where(x => x.columnName != value),
x => new myObject { columnName = value}
);
edición (20/01/2017): Vale la pena nada de esto ahora está disponible en la forma de un paquete NuGet @https://www.nuget.org/packages/LinqPost/.
Install-Package LinqPost
Upvoted para evitar RBAR, la primera respuesta no es realmente correcta. – Jasmine
- 1. inserción masiva con linq-to-sql
- 2. LINQ to SQL - actualización de registros
- 3. Actualización de una sola columna en LINQ to SQL
- 4. LINQ to SQL Peculiarities
- 5. Herramienta SQL to LINQ
- 6. LINQ To SQL Paging
- 7. ¿Puedo "deshacer" una actualización de LINQ to SQL?
- 8. LINQ to SQL -
- 9. Actualización masiva Magento atributos
- 10. LINQ to SQL PredicateBuilder
- 11. Linq-to-SQL ToDictionary()
- 12. ¿Cómo ejecutar una consulta de actualización/eliminación masiva en Linq?
- 13. Inserción masiva O actualización con hibernación?
- 14. ¿Cómo actualizar con Linq-To-SQL?
- 15. Usando LINQ to SQL con Oracle
- 16. Devolver un recuento con linq-to-sql
- 17. conseguir último elemento con LINQ to SQL
- 18. Concurrencia con Linq To Sql y ASP.NET
- 19. ¿Cómo ignorar caso con LINQ-to-SQL?
- 20. LINQ to SQL: problema con la concurrencia
- 21. Entity Framework vs Linq to Entities vs Linq to SQL
- 22. LINQ to SQL Conversion Overflows
- 23. LINQ to SQL para Oracle.ODP
- 24. LINQ to SQL valores predeterminados
- 25. Linq-to-SQL y sp_reset_connection
- 26. Linq to SQL create table
- 27. ¿Qué es "Linq to SQL"?
- 28. LINQ to SQL e inmutabilidad
- 29. linq to sql update standard
- 30. LINQ to SQL ForeignKeyReferenceAlreadyHasValueException error
¿Estás hablando de LINQ to SQL? –
Siempre volví a los procedimientos almacenados para realizar actualizaciones masivas utilizando XML como datos masivos, pero me gustaría saber si es posible en LINQ. –