2009-09-13 16 views

Respuesta

3

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.

+0

¿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? –

+0

@ Adam nope. Solo mi memoria, que a menudo es defectuosa. Eliminaré ese bit hasta que se aclare de una forma u otra. ¡Gracias! –

+0

@ 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. –

5

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); 
} 
0

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) 
Cuestiones relacionadas