2

在普通(未编译)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 具有“ SELECT NULL AS [EMPTY] ”的“非常”有用的 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");
        }

我在谷歌中找不到任何关于这个特定场景的信息,因为毫无疑问这不是一件常见的事情......

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

4

2 回答 2

1

您可以使用 DataContext 日志:

db.Log = Console.Out; 
于 2009-11-13T22:30:14.367 回答
0

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

于 2009-11-12T01:46:00.240 回答