Jak napisać LINQ to SQL równowartość:Jak wykonać polecenie "INSERT INTO table1 (...) SELECT (...) FROM table2" w LINQ?
INSERT INTO Table1 (field1, field2, field3)
SELECT field1, field2, field3
FROM Table2
WHERE (field1= @field1)
Thanks
Jak napisać LINQ to SQL równowartość:Jak wykonać polecenie "INSERT INTO table1 (...) SELECT (...) FROM table2" w LINQ?
INSERT INTO Table1 (field1, field2, field3)
SELECT field1, field2, field3
FROM Table2
WHERE (field1= @field1)
Thanks
LINQ to język zapytań, więc nie zrobić aktualizacje lub wkładki. Jednak -the LINQ to SQL model obiektowy jednostka ma metody obchodzenia 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();
}
Prawdziwa różnica jest to, że wymaga to dwa oddzielne transactionsinstead SQL One - jeden do wyboru, a jeden do wstawienia.
Ponieważ nie wracają żadnych wyników, wystarczy użyć metody niskiego poziomu 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);
}
Jeśli pole obu tabelach są takie same wtedy, użycie
insert into table1 select * from table2 where table2.field1='xyz';
w miejsce:
INSERT INTO Table1 (field1, field2, field3)
SELECT field1, field2, field3
FROM Table2
WHERE (field1= @field1)
Czy masz jakiś dokument Aby utworzyć kopię zapasową twierdzenie, że wszystkie wstawki mają miejsce w jednej rundzie podróży? –
@Adam nope. Tylko moja pamięć, która często jest wadliwa. Usuwam ten bit ", dopóki nie zostanie wyjaśniony w ten czy inny sposób. Dzięki! –
@Adam, narzędzie SQL Profiler rzuci trochę światła na sposób komunikacji LINQ-SQL z serwerem bazy danych i jest dobrym sposobem mierzenia wydajności oraz tego, jak dobrze LINQ konstruuje swoje zapytania i partie. –