Подтвердить что ты не робот

Получить SQL-запрос из LINQ to SQL?

У меня есть запрос, который я передаю byte[] в качестве параметра. Я пытаюсь получить SQL-запрос из него и запустить этот запрос в студии управления для отладки. Как я могу извлечь из него инструкцию SQL?

 committeeMember =
           db.Committee_Member.FirstOrDefault(x => x.Customer_Number == activity.Contact.Number
           && x.Position_Start_Date.Value.Year == activity.EndDate
           && x.Committee_Id == activity.Committee.Id && x.Cancelled != 1);
4b9b3361

Ответ 1

В отладчике наведите указатель мыши на переменную commiteeMember - он покажет сгенерированный SQL-запрос:

enter image description here

Это то, что возвращает ToString() для запроса. Вы можете получить тот же сгенерированный SQL-запрос вручную, вызвав ToString:

string sql = committeeMember.ToString();

Этот переопределенный метод внутренне вызывает ObjectQuery.ToTraceString(), который возвращает команды, которые будут запускаться в источнике данных.


Также вы можете использовать SQL Profiler или Entity Framework Profiler, чтобы увидеть, какой SQL-запрос был выполнен.

Ответ 2

Кстати, LINQ to SQL не является структурой сущности. Если первый, вы можете установить [yourDataContext].Log = Console.Out (или другой писатель потока) и получить запрос.

В запросе у вас есть возможность написать его следующим образом, чтобы сделать трюк ToString:

var committeeMemberQuery =
           db.Committee_Member.*WHERE*
           (x => 
              x.Customer_Number == activity.Contact.Number
                 && x.Position_Start_Date.Value.Year == activity.EndDate
                 && x.Committee_Id == activity.Committee.Id && x.Cancelled != 1
           );

var committeeMember = committeeMemberQuery.FirstOrDefault();

Теперь вы можете сделать committeeMemberQuery.ToString(), но вы не получите информацию о параметрах (вы будете с DataContext.Log = Console.Out, но опять же, что не Entity Framework, это LINQ to SQL.