Как это сделать, используя метод ObjectQuery?Как просмотреть LINQ Сгенерированные операторы SQL?
ответ
Вот что я нашел с помощью метода ObjectQuery. Используя консоль для тестирования, вы можете сделать следующее:
Создайте метод расширения, как показано ниже, затем вызовите его. Произнесите продукт продукта, затем SQL распечатает его как product.ToTraceString.
public static class MyExtensions
{
public static string ToTraceString<T>(this IQueryable<T> t)
{
string sql = "";
ObjectQuery<T> oqt = t as ObjectQuery<T>;
if (oqt != null)
sql = oqt.ToTraceString();
return sql;
}
}
Вы можете использовать LINQPad.
Они говорят, что его помощь ObjectQuery или SQL Profiler. Как это сделать программно в консоли, например? – nellbryant
Я не уверен, понял ли я последний вопрос ... По крайней мере, чтобы ответить на вопрос в вашем заголовке «Как просмотреть LINQ сгенерированные операторы SQL»: LINQPad имеет окно вывода, в котором вы можете выбрать «Результаты», «Лямбда» или «SQL». –
Эй, это хороший инструмент с открытым исходным кодом !. Спасибо. – nellbryant
Вы могли бы посмотреть на Linq-to-SQL Debug Visualizer, или просто наведите курсор запроса Linq-на-SQL (подсказка должна показать генерироваться SQL), или доступ:
context.GetCommand(query).CommandText
Я еще не пробовал GetCommand. Мне нравится ссылка от Скотта Гу! Является ли этот Visualizer встроенным Visual Studio 2010? – nellbryant
@nellbryant: нет, это все еще отдельное расширение, которое нужно захватить из галереи VS. –
Вы всегда можете прикрепить что-то свойство .Log вашего DataContext. Это покажет все команды SQL по мере их отправки.
Я делаю это в своей базе для объектов доступа к данным и вывод их на консоль отладки Visual Studio. Поскольку объекты создают свои DataContext я проверить это увидеть, если его отладки и прикрепить TextWritter вспомогательный класс, как это:
dbDataContext _dB = new dbDataContext();
_dB.CommandTimeout = 5000;
#if DEBUG
_dB.Log = new DebugTextWriter();
#endif
Вот вспомогательный объект для вывода отладочной консоли:
//utility class for output of TextWriter for the Visual Sudio Debug window
class DebugTextWriter : System.IO.TextWriter
{
public override void Write(char[] buffer, int index, int count)
{
System.Diagnostics.Debug.Write(new String(buffer, index, count));
}
public override void Write(string value)
{
System.Diagnostics.Debug.Write(value);
}
public override Encoding Encoding
{
get { return System.Text.Encoding.Default; }
}
}
Для тех, кто использует ** Entity Framework 6 ** проверьте [this] (http://stackoverflow.com/a/20751723/2218697) , надежда помогает кому-то. – stom
Вы можете запустить Профайлер SQL Server.
var q = from img in context.Images
...
select img;
string sql = q.ToString();
sql
будет содержать запрос выбора sql.
EDIT: недостаток: параметров не будут иметь значения в это время
Если вы отлаживаете локально и используете SQL Server, запустите SQL Profiler. Появится запрос со всеми параметрами. – Rich
только небольшое обновление, теперь вы можете использовать действие для входа в SQL:
// test SQL logger
Action<string> SQLLogger = (message) => System.Diagnostics.Debug.Write(message);
_dB.Context().Database.Log = SQLLogger;
- 1. Как просмотреть LINQ Сгенерированные инструкции SQL для вставки?
- 2. Неверные операторы SQL, сгенерированные JPA
- 3. Неверные операторы SQL, сгенерированные при использовании System.Data.SQLite.Linq
- 4. LINQ операторы, как в
- 5. Как получить автоматически сгенерированные операторы SQL из операции NHibernate?
- 6. NHibernate: Как показать сгенерированные операторы SQL на панели Windows
- 7. Сгенерированные операторы копирования и перемещения?
- 8. Сгенерированные классы C# LINQ to SQL
- 9. Как просмотреть сгенерированные SQL-выражения для Android/SQLite
- 10. просмотреть sql, который создает linq-to-sql
- 11. Как просмотреть запросы, сгенерированные спящим режимом?
- 12. Как просмотреть сообщения об ошибках, сгенерированные dajaxice
- 13. Как просмотреть все сгенерированные системой намерения?
- 14. Wrap в Java Сгенерированные операторы .sql в 50 блоках
- 15. просмотреть функции по умолчанию, сгенерированные компилятором?
- 16. Как отправить поля, сгенерированные SQL?
- 17. Сгенерированные запросы linq эффективно кэшируются SQL Server 2008?
- 18. Добавление новых методов в классы, сгенерированные LINQ to SQL
- 19. Как просмотреть результаты запроса LINQ to SQL в Messagebox?
- 20. Операторы подстановки и case в LINQ to SQL
- 21. Могу ли я расширить операторы, поддерживаемые LINQ to SQL?
- 22. Windows Azure Table Storage Операторы LINQ
- 23. Linq-to-Sql - Операторы последовательности не поддерживаются для типа 'System.String'
- 24. Как использовать SQL-условные операторы
- 25. Как работают операторы SQL select
- 26. SQL - как консолидировать или операторы
- 27. Являются ли тройные операторы недействительными для запросов linq-to-sql?
- 28. ASP .NET MVC + LINQ Сгенерированные классы + DataAnnotations
- 29. Как сгенерировать операторы SQL из миграции Sequel
- 30. ли перемещение конструкторы операторы/назначения, сгенерированные для производных классов
Он также может использоваться в окне просмотра VS: '((ObjectQuery) myQuery) .ToTraceString()'. Хороший! – icebat
Как насчет агрегированных методов, таких как 'Count'? –
Я не думаю, что работает при использовании dbContext, поскольку вы не можете использовать IQueryable для ObjectQuery в этом случае. –
NER1808