C# 从 LINQ 到 SQL 获取 SQL 查询?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/18237312/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-10 11:37:18  来源:igfitidea点击:

Get SQL query from LINQ to SQL?

c#.netlinq-to-sql

提问by James123

I have a query which I am passing byte[]as a parameter. I am trying to get the SQL query out of it and run that query in management studio to debug. How can I extract the SQL statement from it?

我有一个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);

回答by Sergey Berezovskiy

In debugger hover mouse over commiteeMembervariable - it will show generated SQL query:

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

enter image description here

在此处输入图片说明

This is what ToString()returns for query. You can get same generated SQL query manually by calling ToString:

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

string sql = committeeMember.ToString();

This overridden method internally calls ObjectQuery.ToTraceString()which returns commands that will run on data source.

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



Also you can use SQL Profiler or Entity Framework Profiler to see which SQL query was executed.

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

回答by Mark Sowul

Incidentally, LINQ to SQL is not entity framework. If the former, you can set [yourDataContext].Log = Console.Out(or some other stream writer) and get the query.

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

In the query you have, consider writing it as follows to be able to do the ToStringtrick:

在您拥有的查询中,请考虑按如下方式编写它以实现此目的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();

Now you can do committeeMemberQuery.ToString()however you will not get parameter info (you will with DataContext.Log = Console.Outbut again, that's not Entity Framework, it's LINQ to SQL.

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