在LINQ to SQL中获取LINQ命令发出的SQL查询
本文关键字:SQL LINQ 查询 获取 to 命令 | 更新日期: 2023-09-27 18:19:21
我抓取将由LINQ to SQL命令发出的SQL,并将其存储在c#代码中的字符串中。我不想把它发送到控制台,我不想在SQL Studio或LinqPad中单独分析它。我想要这个字符串,这样我的程序就可以用这个字符串做它想做的事情。(实际上,我将把它发送到log4net,但这是偶然的)。
有人知道怎么得到这个吗?我知道SQL实际上并没有发出到数据库,直到您开始遍历迭代器,但我希望也许有一种方法可以事先获得SQL。
如果你正在使用实体框架,你可以在ObjectQuery上使用ToTraceString()
方法,像这样:
ObjectQuery<Product> productQuery =
from p in context.Products
select p;
string sql = productQuery.ToTraceString();
如果你正在使用Linq to Sql,你的DataContext有一个Log属性,你可以使用它来获取Sql输出。
StringBuilder logBuilder = new StringBuilder();
db.Log = new StringWriter(logBuilder);
var custQuery =
(from cust in db.Customers
where cust.City == "London"
select cust).ToList();
string sql = logBuilder.ToString();
您没有说您是使用Linq to SQL还是EF,但是对于L2S,数据库上下文对象具有可用于此目的的Log属性。你可以在这里了解更多关于这个性质的信息。请记住,如果不进行一些修改,您将无法执行生成的SQL。