2012-01-04 7 views
2

へのLINQでLINQコマンドによって発行されたSQLクエリを取得します。私はそれが出てコンソールに送信したくない、ではない私は、SQL StudioまたはLinqPadで別々にそれを分析したいです。私はその文字列を持っていて、私のプログラムは文字列を使ってそれが望むことができるようにしたい。 (実際はlog4netに送信しますが、それは偶然です)。私はSQLコマンドにLINQによって発行されるSQLをつかむと、私のC#のコード内の文字列に格納しSQL

誰もがこれを取得する方法を知っていますか?私はあなたがイテレータを歩いて開始するまでSQLが実際にデータベースに発行されていないことを知っているが、私はおそらく、事前にSQLを取得する方法があることを期待しています。

+1

このLINQ to SQL、またはEntity Frameworkはありますか? –

+0

[OK]を、私は、LINQ 2 SQLを指定するには、タイトルと内容を更新しました。 –

答えて

6

あなたはこのようにObjectQueryにToTraceString()メソッドを使用することができますエンティティフレームワークを使用している場合:あなたはDataContextのは、あなたが使用することができますLog propertyを持っているなら、あなたはLINQ to SQLのを使用している場合

ObjectQuery<Product> productQuery = 
    from p in context.Products 
    select p; 

string sql = productQuery.ToTraceString(); 

SQLの出力を取得します。

StringBuilder logBuilder = new StringBuilder(); 
    db.Log = new StringWriter(logBuilder); 
    var custQuery = 
     (from cust in db.Customers 
     where cust.City == "London" 
     select cust).ToList(); 

    string sql = logBuilder.ToString(); 
+0

これはLinq to SQLです。しかし、私はコンソールでそれをしたくない、私は使用する実際の文字列値を持っています。 –

+0

@DanielWilliams私は自分の答えを更新しました。コンソールは単なる例でした。任意のTextWriterを挿入できます。 –

+0

完璧 - ありがとう! –

2

あなたはSQLまたはEFへのLINQを使用している場合には言いませんが、L2Sで、データベースコンテキストオブジェクトは、この目的のために使用することができるログのプロパティがあります。このプロパティの詳細については、hereをご覧ください。何も変更せずに生成されたSQLを実行することはできないことに注意してください。

関連する問題