代码之家  ›  专栏  ›  技术社区  ›  Andrew Harry

如何从编译的linq查询中提取sql命令

  •  2
  • Andrew Harry  · 技术社区  · 16 年前

    在普通(未编译)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具有'very'有用的commandText' 选择空作为[空]

            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 回复  |  直到 7 年前
        1
  •  1
  •   mkedobbs    16 年前

    您可以使用数据上下文日志:

    db.Log = Console.Out; 
    
        2
  •  0
  •   Kuberchaun    16 年前

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

    推荐文章