我获取将由LINQ to SQL命令发出的SQL并将其存储在我的C#代码中的字符串中。我不想将它发送到控制台,我不想在SQL Studio或LinqPad中单独分析它。我希望有这个字符串,以便我的程序可以用字符串做它想要的。 (实际上,我会将它发送到log4net,但这是偶然的。)
有谁知道如何获得这个?我知道在你开始遍历迭代器之前,SQL实际上并没有发布到数据库,但是我希望也许有办法预先获取SQL。
答案 0 :(得分:6)
如果您使用的是Entity Framework,可以在ObjectQuery上使用ToTraceString()
方法,如下所示:
ObjectQuery<Product> productQuery =
from p in context.Products
select p;
string sql = productQuery.ToTraceString();
如果您正在使用Linq to Sql,那么您的DataContext可以使用Log property来获取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();
答案 1 :(得分:2)
您没有说是否使用Linq to SQL或EF,但是对于L2S,数据库上下文对象具有可用于此目的的Log属性。您可以详细了解此属性here。请记住,如果不做一些修改,您将无法执行生成的SQL。