¿Cómo se escribe un LINQ a SQL equivalente de:Cómo hacer "INSERT INTO table1 (...) SELECT (...) FROM table2" en LINQ?
INSERT INTO Table1 (field1, field2, field3)
SELECT field1, field2, field3
FROM Table2
WHERE (field1= @field1)
Gracias
¿Cómo se escribe un LINQ a SQL equivalente de:Cómo hacer "INSERT INTO table1 (...) SELECT (...) FROM table2" en LINQ?
INSERT INTO Table1 (field1, field2, field3)
SELECT field1, field2, field3
FROM Table2
WHERE (field1= @field1)
Gracias
LINQ es un lenguaje de consulta, por lo que no hace actualizaciones o inserciones. Sin embargo -la LINQ a SQL modelo de objetos entidad tiene métodos para el manejo CUD:
using(MyDataContext dc = new MyDataContext())
{
//select the source entities from Table2
var Table2Entities = (from e in dc.Table2 where e.Field1 == "value" select e);
//for each result, create a new Table1 entity and attach to Table1
Table2Entities.ForEach(t2e => dc.Table1.InsertOnSubmit(
new Table1Entity {
Field1 = t2e.Field1,
Field2 = t2e.Field2,
Field3 = t2e.Field3
});
//submit the changes
dc.SubmitChanges();
}
La verdadera diferencia aquí es que requiere dos transactionsinstead SQL separada de una - para seleccionar uno, y uno para insertar.
Puesto que no se está devolviendo ningún resultado, sólo tiene que utilizar el método de bajo nivel DataContext.ExecuteCommand()
:
using (MyDataContext dc = new MyDataContext())
{
dc.ExecuteCommand(@"
INSERT INTO Table1 (field1, field2, field3)
SELECT field1, field2, field3
FROM Table2
WHERE (field1= {0})
",
field1);
}
Si el campo tanto de las tablas es igual entonces, uso
insert into table1 select * from table2 where table2.field1='xyz';
en lugar de:
INSERT INTO Table1 (field1, field2, field3)
SELECT field1, field2, field3
FROM Table2
WHERE (field1= @field1)
¿Tiene algún documento? para hacer una copia de seguridad de la afirmación de que todas las inserciones tienen lugar en un viaje de ida y vuelta? –
@ Adam nope. Solo mi memoria, que a menudo es defectuosa. Eliminaré ese bit hasta que se aclare de una forma u otra. ¡Gracias! –
@ Adam, la herramienta SQL Profiler arrojará luz sobre cómo LINQ-to-SQL se está comunicando con el servidor de base de datos y es una buena forma de medir el rendimiento y qué tan bien LINQ está construyendo sus consultas y lotes. –