Редактировать: Подождите, вы говорите о LINQ to Objects? Нет, это невозможно 1 . Невозможно преобразовать дерево выражений для запроса LINQ to Object в дерево выражений, которое представляет собой запрос к некоторой базе данных.
Редактировать: не пишите, что вы - собственный ORM. Есть проверенные решения этой проблемы. Вы теряете ценность, пытаясь решить эту проблему снова. Если вы собираетесь использовать свой собственный ORM для преобразования выражения в оператор SQL, то вам придется написать свой собственный поставщик. Вот пошаговое руководство по MSDN.
А если серьезно, не пишите свой собственный ORM. Пять лет назад, до того, как появились NHibernate и LINQ to SQL, все хорошо. Но не сейчас. Ни за что.
В остальной части этого ответа предполагается, что вы спрашивали о LINQ to SQL.
Есть два способа, о которых я знаю.
Во-первых:
Установите для свойства DataContext.Log
значение Console.Out
(или другое System.IO.TextWriter
на ваш выбор):
var db = new MyDataContext();
db.Log = Console.Out;
Это выведет операторы SQL на консоль по мере их выполнения. Подробнее об этой функции см. MSDN . В других местах есть примеров из TextWriter
с, которые позволяют отправлять вывод в окно вывода отладчика.
Второе:
Используйте визуализатор отладки LINQ to SQL от Скотта Гатри. Это позволяет просматривать операторы SQL через отладчик в Visual Studio. Эта опция имеет то преимущество, что вы можете видеть оператор SQL без выполнения запроса. Вы даже можете выполнить запрос и просмотреть результаты в визуализаторе.
1 : Возможно, не невозможно, но, конечно, очень сложно.