C'è un modo per fare un inserto/selezionare con LINQ che si traduce in questo sql:Insert/Select con LINQ to SQL
INSERT INTO TableA (...)
SELECT ...
FROM TableB
WHERE ...
C'è un modo per fare un inserto/selezionare con LINQ che si traduce in questo sql:Insert/Select con LINQ to SQL
INSERT INTO TableA (...)
SELECT ...
FROM TableB
WHERE ...
Sì @bzlm coperto in primo luogo, ma se si preferisce qualcosa di un po 'più dettagliato:
// dc = DataContext, assumes TableA contains items of type A
var toInsert = from b in TableB
where ...
select new A
{
...
};
TableA.InsertAllOnSubmit(toInsert);
dc.SubmitChanges();
I tipi di preferisco questo da un punto di vista revisione/manutenzione Penso che sia un po' più evidente quello che sta succedendo nella select.
In risposta all'osservazione da @JfBeaulac:
Si prega di notare che questo non genererà lo SQL mostrato - per quanto io sappia in realtà non è possibile generare direttamente utilizzando Linq (a SQL), dovresti bypassare linq e andare direttamente al database. Funzionalmente dovrebbe ottenere lo stesso risultato in quanto eseguirà la selezione e quindi inserirà i dati, ma eseguirà il round-trip dei dati dal server al client e viceversa, pertanto potrebbe non essere ottimale per grandi volumi di dati.
context
.TableA
.InsertAllOnSubmit(
context
.TableB
.Where(...)
.Select(b => new A { ... })
);
Non amate semplicemente downvotes arbitrari senza spiegazione – Murph
Ciò non si tradurrà nell'istruzione SQL specificata nella domanda. Selezionerà le voci date in TableB e genererà un gruppo di istruzioni insert in TableA. Sembra che sia la stessa cosa ma non è una traduzione diretta del dato SQL. –
@JfBeaulac Devo modificare il post allora. – Murph