web-dev-qa-db-ja.com

LINQ to SQLからSQLクエリを取得しますか?

byte[]をパラメーターとして渡しているクエリがあります。 SQLクエリを取得し、Management Studioでそのクエリを実行してデバッグしようとしています。どうすればそこからSQLステートメントを抽出できますか?

 committeeMember =
           db.Committee_Member.FirstOrDefault(x => x.Customer_Number == activity.Contact.Number
           && x.Position_Start_Date.Value.Year == activity.EndDate
           && x.Committee_Id == activity.Committee.Id && x.Cancelled != 1);
38
James123

デバッガーでcommiteeMember変数の上にマウスを移動します-生成されたSQLクエリが表示されます:

enter image description here

これは、クエリに対してToString()が返すものです。 ToStringを呼び出すことにより、同じ生成されたSQLクエリを手動で取得できます。

_string sql = committeeMember.ToString();
_

このオーバーライドされたメソッドは、内部で ObjectQuery.ToTraceString() を呼び出し、データソースで実行されるコマンドを返します。


また、SQLプロファイラーまたはEntity Frameworkプロファイラーを使用して、実行されたSQLクエリを確認できます。

72

ちなみに、LINQ to SQLはエンティティフレームワークではありません。前者の場合、 _[yourDataContext].Log = Console.Out_ (または 他のストリームライター )を設定してクエリを取得できます。

持っているクエリで、ToStringトリックを実行できるように次のように記述することを検討してください。

_var committeeMemberQuery =
           db.Committee_Member.*WHERE*
           (x => 
              x.Customer_Number == activity.Contact.Number
                 && x.Position_Start_Date.Value.Year == activity.EndDate
                 && x.Committee_Id == activity.Committee.Id && x.Cancelled != 1
           );

var committeeMember = committeeMemberQuery.FirstOrDefault();
_

これでcommitteeMemberQuery.ToString()を実行できますが、パラメーター情報は取得できません( _DataContext.Log = Console.Out_ で取得できますが、これもEntity Frameworkではなく、LINQ to SQLです。

15
Mark Sowul