Получить 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);
Ответы
Ответ 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.