如何知道我的程序在执行 linq 表达式时执行了什么 sql 查询?
分析是一种确定的方法。根据 LINQ 提供程序的不同,这也可能是内置的,例如,使用 LINQ-to-SQL,您可以将任何内容分配给.Log
,它将在执行查询时编写查询。在最简单的层面上:
dataContext.Log = Console.Out; // for a LINQ-to-SQL DataContext
// TODO: now execute some queries against dataContext
在内部,我们为此(以及其他一些事情)使用自定义 ADO.NET 堆栈。它看起来像一个SqlConnection
(LINQ-to-SQL 对此非常满意),但它对执行的每个命令都会为我们执行一些日志记录和分析,因此我们可以看到长时间运行的操作在哪里。我认为,如果你愿意,山姆希望向公众提供这个。
分析数据库就可以了。 请记住,在代码查询查询结果之前,不会对数据库执行语句。
你试过 LinqPad 吗?
我相信它显示了您的查询的 SQL 原型。
- 您可以使用 SQL 事件探查器,附带SQL 服务器安装,并捕获执行语句时的语句
- 你可以使用像 LINQPad 这样的工具,以及针对数据存储运行 LINQ并检查工具中的 SQL
- 您可以调试您的应用程序并从
ObjectQuery.ToTraceString
方法
var res = somequery;
Console.WriteLine(res);