【问题标题】:Seeing the SQL that LINQ generates [duplicate]查看 LINQ 生成的 SQL [重复]
【发布时间】:2016-01-22 07:36:03
【问题描述】:

例如,如果我有一个 LINQ to SQL 语句

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

当我想查看LINQ 正在生成什么SQL 时,我所做的是注释掉ToList() 并在此LINQ 语句之后的命令上放置一个断点,然后我可以将其悬停并阅读 SQL。

我的问题:这是获取生成的 SQL 的正确方法吗?

【问题讨论】:

  • 我更喜欢使用 LinqPad。它有一个“SQL”选项卡来显示生成的 SQL。

标签: c# linq


【解决方案1】:

您还可以将您的上下文的 Log 属性设置为:

public class MyContext : DbContext{

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

【讨论】:

    【解决方案2】:

    是的,这是正确的方法,但当然还有其他方法:

    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:

    【讨论】:

      【解决方案3】:

      您还可以使用 SQL Server Profiler、添加跟踪并查看生成的查询,因为它们正在由服务器执行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-07
        • 1970-01-01
        • 2011-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多