如何查看LINQ生成的SQL语句?

时间:2011-02-04 15:53:19

标签: linq

如何使用ObjectQuery方法完成?

9 个答案:

答案 0 :(得分:54)

您始终可以将某些内容附加到DataContext的.Log属性中。这将显示发送时的所有SQL命令。

我在数据访问对象的基础上执行此操作并将其输出到Visual Studio调试控制台。当对象创建他们的DataContext时,我检查它是否调试并附加一个TextWritter帮助器类,如下所示:

dbDataContext _dB = new dbDataContext();
_dB.CommandTimeout = 5000;

#if DEBUG
    _dB.Log = new DebugTextWriter();
#endif

以下是输出到调试控制台的辅助对象:

//utility class for output of TextWriter for the Visual Sudio Debug window
class DebugTextWriter : System.IO.TextWriter
{
    public override void Write(char[] buffer, int index, int count)
    {
        System.Diagnostics.Debug.Write(new String(buffer, index, count));
    }

    public override void Write(string value)
    {
        System.Diagnostics.Debug.Write(value);
    }

    public override Encoding Encoding
    {
        get { return System.Text.Encoding.Default; }
    }
}

答案 1 :(得分:24)

以下是我使用ObjectQuery Method发现的内容。使用控制台进行测试,您可以执行以下操作:

如下所示创建扩展方法,然后调用它。说产品产品,然后SQL打印出产品.ToTraceString。

public static class MyExtensions
{
    public static string ToTraceString<T>(this IQueryable<T> t)
    {
        string sql = "";
        ObjectQuery<T> oqt = t as ObjectQuery<T>;
        if (oqt != null)
            sql = oqt.ToTraceString();
        return sql;
    }
}

答案 2 :(得分:20)

您可以使用LINQPad

答案 3 :(得分:17)

 var q = from img in context.Images
                    ...
         select img;
 string sql = q.ToString();

sql将包含sql select查询。

编辑:缺点:此时参数不会有任何值

答案 4 :(得分:15)

您可以查看Linq-to-SQL Debug Visualizer,或者只是将鼠标悬停在Linq-to-SQL查询上(工具提示应显示生成的SQL)或访问:

context.GetCommand(query).CommandText

答案 5 :(得分:5)

您可以运行SQL Server Profiler。

答案 6 :(得分:1)

这是设置数据库上下文时使用的:

this.DbContext.Database.Log += s => Debug.WriteLine(s);

答案 7 :(得分:0)

只是一个小更新,您现在可以使用Action来记录SQL:

// test SQL logger
Action<string> SQLLogger = (message) => System.Diagnostics.Debug.Write(message);
_dB.Context().Database.Log = SQLLogger;

答案 8 :(得分:0)

如果要对数据库执行linq查询,则可以运行SQL事件探查器以记录正在执行的SQL查询。我们经常这样做,以确定对转换的性能影响。