在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。

在LINQ to SQL中获取LINQ命令发出的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。