2013-08-14 20 views
31

Ho una query che sto passando a byte[] come parametro. Sto cercando di ottenere la query SQL e di eseguire quella query in Management Studio per eseguire il debug. Come posso estrarre l'istruzione SQL da esso?Ottieni query SQL da LINQ a SQL?

committeeMember = 
      db.Committee_Member.FirstOrDefault(x => x.Customer_Number == activity.Contact.Number 
      && x.Position_Start_Date.Value.Year == activity.EndDate 
      && x.Committee_Id == activity.Committee.Id && x.Cancelled != 1); 
+4

LINQPad consentirebbe anche di vedere la SQL ed eseguire il codice SQL direttamente – Hogan

risposta

59

Nel debugger passaggio del mouse sopra commiteeMember variabile - mostrerà query SQL generato:

enter image description here

Questo è ciò che ToString() ritorni per query. È possibile ottenere stessa query SQL generato manualmente chiamando ToString:

string sql = committeeMember.ToString(); 

Questo metodo override chiama internamente ObjectQuery.ToTraceString() che restituisce i comandi che verranno eseguiti sulla fonte di dati.


Inoltre, è possibile utilizzare SQL Profiler o Entity Framework Profiler per vedere quale query SQL è stata eseguita.

+0

per curiosità, c'è un modo per farlo a livello di codice? – gunr2171

+0

@ gunr2171 certo, la risposta aggiornato –

+0

SQL Profiler o Entity Frame lavoro Profiler deve essere eseguito su un server SQL o sul mio computer locale? – James123

14

Per inciso, LINQ to SQL non è un framework di entità. Se il primo, è possibile impostare [yourDataContext].Log = Console.Out (o some other stream writer) e ottenere la query.

Nella query che hai, non crei nel seguente modo per essere in grado di fare il ToString trucco:

var committeeMemberQuery = 
      db.Committee_Member.*WHERE* 
      (x => 
       x.Customer_Number == activity.Contact.Number 
       && x.Position_Start_Date.Value.Year == activity.EndDate 
       && x.Committee_Id == activity.Committee.Id && x.Cancelled != 1 
      ); 

var committeeMember = committeeMemberQuery.FirstOrDefault(); 

ora si può fare committeeMemberQuery.ToString() tuttavia non sarà possibile ottenere informazioni parametro (si con DataContext.Log = Console.Out ma ancora una volta , che non è Entity Framework, è LINQ to SQL.

+1

Ho aggiunto un collegamento ad altre implementazioni. IMO, l'opzione "altro streamwriter" è migliore della risposta votata più alta, poiché questa opzione ti consente di visualizzare lo sql generato per le operazioni di inserimento/aggiornamento generate durante la chiamata di "DataContext.SubmitChanges". – RubberDuck

+0

[yourDataContext] .Database.Log = , se si utilizza DbContext. – mhenry1384