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

时间:2012-01-04 15:42:46

标签: c# linq-to-sql

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

有谁知道如何获得这个?我知道在你开始遍历迭代器之前,SQL实际上并没有发布到数据库,但是我希望也许有办法预先获取SQL。

2 个答案:

答案 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。