2016-01-21 70 views
7

如果我有一個LINQ到SQL語句,例如鑑於LINQ產生

var query = (from a in this.Context.Apples select a.Name).ToList(); 

當我想看到的是被LINQ產生什麼SQL的SQL,我做的是我註釋掉ToList()和在這個LINQ聲明之後在命令上放置一個斷點,然後我可以將它懸停並讀取SQL。

我的問題:這是獲得生成的SQL的正確方法嗎?

+1

我更喜歡使用LinqPad。它有一個「SQL」選項卡來顯示生成的SQL。 –

回答

3

是的,這是一個正確的做法,但當然,還有其他:

var context = new DataClasses1DataContext(); 

var sb = new StringWriter(); 
context.Log = sb; 

var query = (from a in context.Persons select a.Name); 

string s = query.ToString(); 
string command = context.GetCommand(query).CommandText; 

//The log requires the query to actually hit the database 
query.ToList(); 
string log = sb.ToString(); 

而且還Linqpad:

enter image description here

5

您還可以在上下文中的日誌屬性設置爲:

public class MyContext : DbContext{ 

    MyContext(){ 
     Database.Log = Console.WriteLine; 
     //or like this 
     //Database.Log = message => Trace.TraceInformation(message); 
    } 
} 
1

您也可以使用SQL Server Profiler,添加一個trace,看看生成的查詢,因爲它們是由服務器執行。