Как сделать "INSERT INTO table1 (...) SELECT (...) FROM table2" в LINQ? - PullRequest
6 голосов
/ 13 сентября 2009

Как мне написать LINQ to SQL эквивалент:

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

Спасибо

Ответы [ 3 ]

6 голосов
/ 13 сентября 2009

Поскольку вы не возвращаете никаких результатов, просто используйте низкоуровневый метод 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);
}
3 голосов
/ 13 сентября 2009

LINQ - это язык запросов, поэтому он не выполняет обновления или вставки. Однако в объектной модели LINQ to SQL есть методы для обработки 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();
}

Реальное отличие состоит в том, что для этого требуются две отдельные транзакции SQL вместо одной - одну для выбора и одну для вставки.

0 голосов
/ 02 марта 2017

Если поле обеих таблиц одинаковое, использовать

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

вместо:

INSERT INTO Table1 (field1, field2, field3)
SELECT field1, field2, field3
FROM Table2
WHERE (field1= @field1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...