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

时间:2010-10-12 13:21:41

标签: c# sql-server visual-studio-2010 entity-framework .net-4.0

我使用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 };

4 个答案:

答案 0 :(得分:12)

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

(query as ObjectQuery<MyEntity>).ToTraceString();

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

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


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

我想我可以为你做所有艰苦的工作......;)。由于您使用的是annoynmous类型,请不要使用<T>部分。

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());

答案 1 :(得分:4)

您可以使用SQL Server ProfilerLinqPad,我确定还有其他工具

答案 2 :(得分:1)

运行SQL Profiler

答案 3 :(得分:1)

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