2009-09-13 6 views

Répondre

3

LINQ est un langage d'interrogation, donc il ne fait pas les mises à jour ou inserts. Cependant -le modèle SQL LINQ pour objet entité a des méthodes de traitement des 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 vraie différence ici est qu'il nécessite deux transactionsinstead SQL séparée d'une - pour sélectionner un, et un à insérer.

+0

Avez-vous un document? ation pour appuyer l'affirmation selon laquelle toutes les insertions ont lieu dans un aller-retour? –

+0

@Adam non. Juste ma mémoire, qui est souvent défectueuse. Je vais retirer ce morceau jusqu'à ce qu'il soit éclairci d'une façon ou d'une autre. Merci! –

+0

@Adam, l'outil SQL Profiler va faire la lumière sur la façon dont LINQ-to-SQL communique avec le serveur de base de données et est un bon moyen de mesurer les performances et comment LINQ construit ses requêtes et ses lots. –

5

Puisque vous ne renvoyaient aucun résultat, il suffit d'utiliser la méthode de bas niveau 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 le champ des deux tables est même alors, utilisation

insert into table1 select * from table2 where table2.field1='xyz';

à la place de:

INSERT INTO Table1 (field1, field2, field3) 
SELECT field1, field2, field3 
FROM Table2 
WHERE (field1= @field1) 
Questions connexes