通常の (コンパイルされていない) 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");
}
この特定のシナリオについては、グーグルで何も見つけることができません。間違いなく、試行するのが一般的ではないためです...
だから....何か考えはありますか?