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

Получить LINQ to sql statement (IQueryable) С параметрами

Я пытаюсь выяснить, есть ли способ получить (полный) SQL-запрос, который выполняется на сервере базы данных.
Я уже что-то нашел, но это не совсем то, что мне хотелось бы:

IQueryable<SomeType> someQuery = ...
string command = dataContext.GetCommand(query).CommandText;

В моем случае это дает мне командную строку примерно так:

SELECT TOP (50) [t0].[ID], ....
FROM [dbo].[someTable] AS [t0]
WHERE ([t0].[someColumn] IS NOT NULL) AND (([t0].[someColumn]) IN (@p0))

В базе данных выполняется:

exec sp_executesql N'SELECT TOP (50) [t0].[ID], ...
FROM [dbo].[someTable] AS [t0]
WHERE ([t0].[someColumn] IS NOT NULL) AND (([t0].[someColumn]) IN (@p0, @p1))',N'@p0  int,@p1 int',@p0=401,@p1=201

Есть ли способ получить этот "полный" оператор (так же, как и значения параметра) из кода С#?

4b9b3361

Ответ 1

Как только вы получите команду, вы можете распечатать CommandText, а затем прокрутить коллекцию параметров и распечатать все отдельные параметры.

Также есть визуализатор отладки linq-to-sql, который делает то же самое в режиме отладки.

Хорошим инструментом для просмотра запросов, поскольку они происходят, является Профилировщик Linq-to-sql

Ответ 2

(SqlCommand)dataContext.GetCommand(query)

предоставит вам доступ к коллекции параметров.

Ответ 3

Вы также можете использовать свойство DataContext Log для регистрации сгенерированного SQL (включая текст команды и параметры).

Просто установите YourDataContext.Log = SomeTextWriter. Его можно записать в файл (Log = new StreamWriter(@"c:\temp\linq.log")) или отладить окно, посмотреть это сообщение

Ответ 4

Вы также можете увидеть сгенерированный SQL-запрос, если у вас есть экземпляр IQueryable<T> и вызовите метод .ToString().
Например:

var db = new DbContext();
IQueryable<Blog> query = db.Blog.Where(tt=> tt.Id > 100).OrderByDescending(tt=>tt.Id);
var sqlString = query.ToString();
Console.WriteLine(sqlString);

Это будет генерировать вывод:

SELECT [Extent1].[Id] AS [Id], 
[Extent1].[Title] AS [Title], 
[Extent1].[Author] AS [Author], 
[Extent1].[Text] AS [Text], 
[Extent1].[CreatedAt] AS [CreatedAt], 
[Extent1].[UpdatedAt] AS [UpdatedAt]
FROM [dbo].[Blogs] AS [Extent1]
WHERE [Extent1].[Id] > 100
ORDER BY [Extent1].[Id] DESC