2015-12-18 10 views
8

Voglio ottenere la query Linq tradotta a livello di codice e fare alcune cose con quella sintassi Sql.Dove trovare la richiesta di traduzione da Linq a Entità a Sql

Suppongo che questo sia il mio codice:

public class MyApiController:ApiController 
{ 
    public IQueryable<object> Get() 
    { 
     var objs=Context.Objexts.Where(m=>m.Id>10); 
     return objs; 
    } 
} 

voglio trovare e ottenere la sintassi Sql come:

SELECT * FROM dbo.Objexts where Id > 10 
+0

non si ottiene ciò che si vuole fare. Perché ottenere la query SQL generata da un Linq? – jpgrassi

+0

Sì, non capisco perché vuoi farlo, puoi impostare la query con il codice, perché vuoi modificare la query effettiva? – Theunis

risposta

8

È possibile chiamare il metodo ToString() su objs. Questo si tradurrà in una chiamata al ToTraceStringmethod che restituisce SQL eseguita:

string sql = objs.ToString(); 
+0

Lo sql restituito da ToString sarà sempre una istruzione sql completa senza parametri? Se utilizzo .Where (c => c == "abc '; delete from othertable;"), sarà garantito che sql risultante sia sicuro per l'iniezione sql? – MathiasR

+0

Un concetto così banale ma importante. La metà delle volte verrà avviato il profilo di query sql per ottenere il testo della query che viene generato nell'istanza del server SQL. Dolce! – RBT

6

un'altra opzione se si utilizza Entity Framework 6 è utilizzare la nuova funzionalità per la registrazione che cosa è questo accada, è possibile ottenere il T-SQL e il tempo di query :

Logging and Intercepting Database Operations

using (var context = new BlogContext()) 
{ 
    context.Database.Log = Console.Write; //here, you can write this info to a text file for example. 

    // Your code here... 
} 
+0

Questa è l'opzione migliore !!! Molto bella. –