如何找出此语句生成的实际SQL?

我使用的是VS2010,.NET4和EF4。 我想看看运行它时生成的实际SQL。 另外,这是写这个陈述的最佳方式是什么?

这是我的代码:

var cklContactItems = from a in dbTestCenterViews.appvuChecklistExports where a.MarketChecklistID == MCLID && a.checklistSectionID == SID && a.fieldGroupOrder != null orderby a.fieldGroupOrder ascending select new { a.Column1, a.Column2, a.Column3, a.Column4, a.Column5,a.Column1FieldID,a.Column2FieldID,a.Column3FieldID,a.Column4FieldID,a.Column5FieldID,a.fieldGroupOrderLabel }; 

 var query = (from x in context.MyEntity where x... select x); (query as ObjectQuery).ToTraceString(); 

这将打印到跟踪日志…如果您想要一个简单的跟踪查看器(在Visual Studio之外),请查看DebugView

作为附加说明,我已经使用/看到的最好的“实时”分析器是Entity Framework Profiler ,你必须付费,但是有一个试用版可用,它会给你一个匹配的SQL代码行。 它还承认常见的“问题”。 安装很简单…你需要添加的是你的应用程序的初始化程序中的一个语句。


**编辑更新以显示如何使用用户代码**

我想我可以为你做所有艰苦的工作……;)。 由于您使用的是annoynmous类型,请忽略部分。

 var cklContactItems = from a in dbTestCenterViews.appvuChecklistExports where a.MarketChecklistID == MCLID && a.checklistSectionID == SID && a.fieldGroupOrder != null orderby a.fieldGroupOrder ascending select new { a.Column1, a.Column2, a.Column3, a.Column4, a.Column5, a.Column1FieldID, a.Column2FieldID, a.Column3FieldID, a.Column4FieldID, a.Column5FieldID, a.fieldGroupOrderLabel }; System.Diagnostics.Trace.WriteLine((query as ObjectQuery).ToTraceString()); 

您可以使用SQL Server Profiler 。 LinqPad ,我相信还有其他工具

运行SQL事件探查器

您正在使用VS10,并且有一个名为Intellitrace的工具。