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
Get SQL query from LINQ 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 commiteeMember
variable - it will show generated SQL query:
在调试器commiteeMember
中将鼠标悬停在变量上 - 它将显示生成的 SQL 查询:
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 ToString
trick:
在您拥有的查询中,请考虑按如下方式编写它以实现此目的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.Out
but again, that's not Entity Framework, it's LINQ to SQL.
现在你可以做,committeeMemberQuery.ToString()
但是你不会得到参数信息(你会得到DataContext.Log = Console.Out
但同样,这不是实体框架,它是 LINQ to SQL。