В обычных (не скомпилированных) запросах 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 ничего об этом конкретном сценарии, так как, без сомнения, это не обычное дело ...
Итак .... Есть мысли?