Sto costruendo un IQueryable<int>
e, a seconda dei criteri che l'utente seleziona, l'alias della colonna int nello SQL generato può variare. A volte è il nome della colonna e qualche volta è qualcosa come "C1". Simile alla mia domanda qui dove chiedo Come posso ottenere i parametri di una query di Entity Framework? , Mi chiedo se c'è un modo per ottenere il nome alias generato della query?
Questo non risponde direttamente alla mia domanda iniziale, ma ho appena saputo di un trucco fantastico che mi permette di scavalcare l'alias (in SQL Server) e ho dovuto condividerlo.
var query = myIQueryable.ToString();
var sql = $@"SELECT x.myAlias
FROM ({query}) x(myAlias)";
Ora posso combinare il mio super-complesso IQueryable con questo piccolo frammento di SQL per fare operazioni di inserimento e aggiornamento di massa. Ad esempio:
var query = myIQueryable.ToString();
var sql = $@"INSERT INTO dbo.myTable (col1)
SELECT x.myAlias
FROM ({query}) x(myAlias)";
O
var query = myIQueryable.ToString();
var sql = $@"UPDATE dbo.myTable
SET Col1 = 1
FROM dbo.myTable
JOIN ({query}) x(myAlias) ON x.myAlias = dbo.myTable.SomeColumn";
Naturalmente, è ancora necessario collegare i parametri della query, che è possibile ottenere seguendo l'esempio riportato nella mia domanda precedente: Come posso ottenere i parametri di una query di Entity Framework?