获取Linq to SQL中LINQ命令发出的SQL查询

Dan*_*ams 2 c# linq-to-sql

我抓住将由LINQ to SQL命令发出的SQL并将其存储在我的C#代码中的字符串中.我不想将它发送到控制台,我不想在SQL Studio或LinqPad中单独分析它.我希望有这个字符串,以便我的程序可以用字符串做它想要的.(实际上,我会将它发送到log4net,但那是偶然的).

有谁知道如何得到这个?我知道在你开始遍历迭代器之前,SQL实际上并没有发布到数据库,但我希望也许有一种方法可以事先获得SQL.

Wou*_*ort 6

如果您正在使用Entity Framework,则可以ToTraceString()在ObjectQuery上使用此方法,如下所示:

ObjectQuery<Product> productQuery =
  from p in context.Products
  select p;

string sql = productQuery.ToTraceString();
Run Code Online (Sandbox Code Playgroud)

如果您使用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();
Run Code Online (Sandbox Code Playgroud)