Как извлечь команду Sql из скомпилированного запроса Linq

В обычных (не скомпилированных) запросах Linq to Sql вы можете извлечь SQLCommand из IQueryable с помощью следующего кода:

SqlCommand cmd = (SqlCommand)table.Context.GetCommand(query);

Можно ли сделать то же самое для скомпилированного запроса?

Следующий код предоставляет мне делегата для скомпилированного запроса:

        private static readonly Func<Data.DAL.Context, string, IQueryable<Word>> Query_Get =
        CompiledQuery.Compile<Data.DAL.Context, string, IQueryable<Word>>(
            (context, name) =>
                from r in context.GetTable<Word>()
                where r.Name == name
                select r); 

Когда я использую это для создания IQueryable и пытаюсь извлечь SqlCommand, похоже, это не работает. При отладке кода я вижу, что возвращенный SqlCommand имеет «очень» полезный CommandText: «SELECT NULL AS [EMPTY]»

        using (var db = new Data.DAL.Context())
        {
            IQueryable<Word> query = Query_Get(db, "word");
            SqlCommand cmd = (SqlCommand)db.GetCommand(query);
            Console.WriteLine(cmd != null ? cmd.CommandText : "Command Not Found");
        }

Я не могу найти в Google ничего об этом конкретном сценарии, поскольку, без сомнения, это не обычное дело ...

Итак .... Есть мысли?


person Andrew Harry    schedule 12.11.2009    source источник
comment
Вы когда-нибудь узнали что-нибудь? Я столкнулся с той же проблемой.   -  person Terry    schedule 18.08.2015


Ответы (2)


Вы можете использовать журнал DataContext:

db.Log = Console.Out; 
person mkedobbs    schedule 13.11.2009

Должен быть выход из .NET, но вы можете профилировать свою базу данных SQL Server и захватывать отправленный ей SQL. Вы можете сделать это из SQL Management Studio.

person Kuberchaun    schedule 12.11.2009