LINQ to DataSet クエリのデバッグ
更新 : November 2007
Visual Studio 2008 は、LINQ to DataSet コードのデバッグをサポートしています。ただし、LINQ to DataSet コードのデバッグと LINQ to DataSet 以外のマネージ コードのデバッグとでは若干違いがあります。ステップ実行、ブレークポイントの設定、デバッガ ウィンドウでの結果の確認など、ほとんどのデバッグ機能は LINQ to DataSet ステートメントでも使用できます。ただし、LINQ to DataSet コードをデバッグする際は、クエリの遅延実行によって生じる副作用を考慮する必要があります。また、エディット コンティニュにも使用上の制限がいくつかあります。このトピックでは、LINQ to DataSet でデバッグを行う場合に固有の事項について、LINQ to DataSet 以外のマネージ コードと比較しつつ説明します。
結果の表示
LINQ to DataSet ステートメントの結果は、データヒント、[ウォッチ] ウィンドウ、[クイック ウォッチ] ダイアログ ボックスを使用して確認できます。ソース ウィンドウで特定のクエリにポインタを置くと、データヒントが表示されます。LINQ to DataSet の変数をコピーし、それを [ウォッチ] ウィンドウまたは [クイック ウォッチ] ダイアログ ボックスに貼り付けることができます。LINQ to DataSet では、クエリが評価されるのは、実際にそのクエリが実行されたときです。作成または宣言した時点では評価されません。これを遅延実行といいます。したがって、それが評価されるまでは、クエリ変数に値は割り当てられません。詳細については、「LINQ to DataSet でのクエリ」を参照してください。
デバッガは、クエリの結果を表示するために、そのクエリを評価する必要があります。この暗黙的な評価は、LINQ to DataSet のクエリ結果をデバッガで表示したときに実行されます。この点には、考慮する必要のあるいくつかの影響があります。クエリを評価するたびに時間がかかります。結果のノードを展開しようとしてもなかなか表示されないことがあります。クエリによっては繰り返し評価が実行され、パフォーマンスが著しく低下する場合があります。さらに、データの値またはプログラムの状態が変わるという副作用が伴う場合もあります。すべてのクエリに副作用が伴うとは限りません。副作用を伴うことなく安全にクエリを評価できるかどうかを判断するには、クエリが実装されているコードを十分に理解する必要があります。詳細については、「副作用と式」を参照してください。
エディット コンティニュ
エディット コンティニュは、LINQ to DataSet クエリに対する変更をサポートしません。デバッグ セッション中に LINQ to DataSet ステートメントを追加、削除、または変更しようとした場合、エディット コンティニュでサポートされない変更であることを伝えるダイアログ ボックスが表示されます。この時点で、変更を取り消すかデバッグ セッションを停止し、コードを編集した上で、新しいセッションを再開できます。
また、エディット コンティニュでは、LINQ to DataSet ステートメントで使用されている変数の型または値を変更することはできません。この場合も、変更を取り消すか、デバッグ セッションをいったん停止した後で再開できます。
Visual C# 2008 では、LINQ to DataSet クエリを含んだメソッドのコードに対して、エディット コンティニュを使用することはできません。
Visual Basic 2008 では、LINQ to DataSet クエリを含んだメソッドであっても、LINQ to DataSet 以外のコードであればエディット コンティニュを使用できます。LINQ to DataSet ステートメントの前にコードを追加したり削除したりすることもできます。その変更によって LINQ to DataSet クエリの行番号に影響が生じる場合でも可能です。LINQ to DataSet 以外のコードに対する Visual Basic のデバッグ作業は、LINQ to DataSet が導入される以前と同じです。ただし、LINQ to DataSet クエリの変更、追加、または削除を行う場合は、デバッグを停止してから変更を適用する必要があります。