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

时间:2009-11-12 01:22:48

标签: 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>> 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中找到关于此特定情况的任何内容,因为毫无疑问,尝试这种情况并不常见......

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

2 个答案:

答案 0 :(得分:1)

您可以使用DataContext日志:

db.Log = Console.Out; 

答案 1 :(得分:0)

必须有一种来自.NET的方法,但您可以分析SQL Server数据库并捕获发送给它的SQL。您可以从SQL Management Studio执行此操作。