2016-01-21 72 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,看看生成的查询,因为它们是由服务器执行。