2009-11-12 84 views
2

在正常(未编译)LINQ到SQL查询,您可以通过下面的代码中提取从IQueryable的中的SqlCommand:如何从遵守LINQ查询提取的SQL命令

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返回拥有的“SELECT NULL AS [清空]

 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"); 
     } 

我无法找到有关此特定情形中的任何谷歌,“非常”有用的CommandText毫无疑问,这是不是普遍的事情...

所以....任何想法?

+0

有没有发现什么呢?我面临同样的挑战。 – Terry 2015-08-18 15:22:25

回答

0

必须有从.NET的方式,但你可以剖析你的SQL Server数据库并捕获发送给它的SQL。您可以从SQL Management Studio执行此操作。

1

您可以使用DataContext的日志:

db.Log = Console.Out;