Linq to sql 如何从已编译的Linq查询中提取Sql命令

Linq to sql 如何从已编译的Linq查询中提取Sql命令,linq-to-sql,sqlcommand,compiled-query,Linq To Sql,Sqlcommand,Compiled Query,在正常(未编译)Linq to Sql查询中,您可以通过以下代码从IQueryable中提取SQLCommand: SqlCommand cmd = (SqlCommand)table.Context.GetCommand(query); 是否可以对编译后的查询执行相同的操作 以下代码为我提供了对已编译查询的委托: private static readonly Func<Data.DAL.Context, string, IQueryable<Word>&g

在正常(未编译)Linq to Sql查询中,您可以通过以下代码从IQueryable中提取SQLCommand:

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); 
private static readonly Func Query\u Get=
CompiledQuery.Compile(
(上下文、名称)=>
来自context.GetTable()中的r
其中r.Name==Name
选择r);
当我使用它生成IQueryable并尝试提取SqlCommand时,它似乎不起作用。调试代码时,我可以看到SqlCommand返回的命令文本“非常”有用,“选择NULL作为[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");
        }
使用(var db=new Data.DAL.Context())
{
IQueryable query=query_Get(db,“word”);
SqlCommand cmd=(SqlCommand)db.GetCommand(query);
Console.WriteLine(cmd!=null?cmd.CommandText:“未找到命令”);
}
我在谷歌上找不到任何关于这一特定场景的信息,因为毫无疑问,这不是一个常见的尝试


所以。。。。有什么想法吗?

一定有办法从.NET获取数据,但您可以分析SQL Server数据库并捕获发送到该数据库的SQL。您可以从SQL Management Studio执行此操作。

您可以使用DataContext日志:

db.Log = Console.Out; 

有什么发现吗?我也面临同样的挑战。