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をキャプチャすることができます。これは、SQLManagementStudioから実行できます。

于 2009-11-12T01:46:00.240 に答える