Получить запрос SQL, выданный командой LINQ в Linq to SQL - PullRequest
2 голосов
/ 04 января 2012

Я беру SQL, который будет выдан командой LINQ to SQL, и сохраняю его в виде строки в моем коде C #.Я не хочу, чтобы его отправляли на консоль, я не хочу анализировать его отдельно в SQL Studio или LinqPad.Я хочу иметь эту строку, чтобы моя программа могла делать со строкой то, что она хочет.(На самом деле я отправлю его в log4net, но это случайно).

Кто-нибудь знает, как это получить?Я знаю, что SQL фактически не выдается в базу данных, пока вы не начнете проходить через итераторы, но я надеюсь, что, возможно, есть способ получить SQL заранее.

Ответы [ 2 ]

6 голосов
/ 04 января 2012

Если вы используете Entity Framework, вы можете использовать метод ToTraceString() в ObjectQuery следующим образом:

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();
2 голосов
/ 04 января 2012

Вы не говорите, используете ли вы Linq to SQL или EF, но в L2S объект контекста базы данных имеет свойство Log, которое можно использовать для этой цели. Вы можете узнать больше об этой собственности здесь . Имейте в виду, что вы не сможете выполнить сгенерированный SQL без каких-либо изменений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...