Вставить / Выбрать с Linq-To-SQL - PullRequest
7 голосов
/ 17 января 2010

Есть ли способ сделать вставку / выбор с Linq, который переводит в этот sql:

INSERT INTO TableA (...)
SELECT ...
FROM TableB
WHERE ...

Ответы [ 2 ]

9 голосов
/ 17 января 2010

Да, @bzlm рассмотрел это сначала, но если вы предпочитаете что-то более подробное:

// dc = DataContext, assumes TableA contains items of type A
var toInsert = from b in TableB
               where ...
               select new A 
               {
                   ...
               };

TableA.InsertAllOnSubmit(toInsert);
dc.SubmitChanges();

Я предпочитаю это с точки зрения проверки / обслуживания, так как я думаю, что это немного более очевидно, что происходит в select.


В ответ на замечание @JfBeaulac:

Обратите внимание, что это не будет генерировать показанный SQL - насколько я знаю, что на самом деле невозможно генерировать напрямую с помощью Linq (для SQL), вам придется обойти linq и перейти прямо в базу данных. Функционально он должен достичь того же результата в том, что он выполнит выбор и затем вставит данные - но он будет передавать данные от сервера к клиенту и обратно, поэтому может быть неоптимальным для больших объемов данных.

1 голос
/ 17 января 2010
context
  .TableA
  .InsertAllOnSubmit(
    context
      .TableB
      .Where( ... )
      .Select(b => new A { ... })
  );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...