48

我有一个byte[]作为参数传递的查询。我正在尝试从中获取 SQL 查询并在管理工作室中运行该查询以进行调试。如何从中提取 SQL 语句?

 committeeMember =
           db.Committee_Member.FirstOrDefault(x => x.Customer_Number == activity.Contact.Number
           && x.Position_Start_Date.Value.Year == activity.EndDate
           && x.Committee_Id == activity.Committee.Id && x.Cancelled != 1);
4

3 回答 3

85

在调试器中将鼠标悬停在commiteeMember变量上 - 它将显示生成的 SQL 查询:

在此处输入图像描述

这是ToString()查询返回的内容。您可以通过调用 ToString 手动获取相同的生成 SQL 查询:

string sql = committeeMember.ToString();

这个被覆盖的方法在内部调用ObjectQuery.ToTraceString()它返回将在数据源上运行的命令。


您还可以使用 SQL Profiler 或 Entity Framework Profiler 查看执行了哪个 SQL 查询。

于 2013-08-14T16:34:16.520 回答
16

顺便说一句,LINQ to SQL 不是实体框架。如果是前者,您可以设置[yourDataContext].Log = Console.Out(或其他一些流编写器)并获取查询。

在您拥有的查询中,考虑将其编写如下以便能够做到这一点ToString

var committeeMemberQuery =
           db.Committee_Member.*WHERE*
           (x => 
              x.Customer_Number == activity.Contact.Number
                 && x.Position_Start_Date.Value.Year == activity.EndDate
                 && x.Committee_Id == activity.Committee.Id && x.Cancelled != 1
           );

var committeeMember = committeeMemberQuery.FirstOrDefault();

现在你可以做,committeeMemberQuery.ToString()但是你不会得到参数信息(你会得到DataContext.Log = Console.Out但同样,那不是实体框架,它是 LINQ to SQL。

于 2013-08-14T17:14:17.313 回答
0

有关从 linq 提取 SQL 命令的另一种方法,请参阅https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/linq/how-to-display-linq-to-sql-commands

更准确地说,以下代码段显示了用例

Northwnd db = new Northwnd(@"c:\northwnd.mdf");

var q =
    from cust in db.Customers
    where cust.City == "London"
    select cust;

DbCommand dc = db.GetCommand(q);

Console.WriteLine("\nCommand Text: \n{0}",dc.CommandText);
Console.WriteLine("\nCommand Type: {0}",dc.CommandType);
Console.WriteLine("\nConnection: {0}",dc.Connection);

Console.ReadLine();

给出一个输出

Command Text:  
SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactT  
itle], [t0].[Address], [t0].[City], [t0].[Region], [t0].[PostalCode], [t0].[Coun  
try], [t0].[Phone], [t0].[Fax]  
FROM [dbo].[Customers] AS [t0]  
WHERE [t0].[City] = @p0  

Command Type: Text  

Connection: System.Data.SqlClient.SqlConnection
于 2020-06-13T09:49:10.830 回答