次の方法で共有


ステップ実行と LINQ

更新 : 2007 年 11 月

このトピックの内容は、次の製品に該当します。

エディション

Visual Basic

C#

C++

Web Developer

Express

トピック該当 トピック該当 トピック該当なし トピック該当

Standard

トピック該当 トピック該当 トピック該当なし トピック該当

Pro/Team

トピック該当 トピック該当 トピック該当なし トピック該当

表の凡例 :

トピック該当

対象

トピック該当なし

該当なし

トピックは該当しますが、コマンドは既定では非表示です

既定で非表示のコマンド

LINQ コードをデバッグする場合には、ステップ実行に動作上の違いがいくつかあるため、注意が必要です。

LINQ to SQL

LINQ to SQL クエリでは、述語コードがデバッガによる処理の対象外となります。そのため、述語コードにステップ インすることはできません。式ツリーにコンパイルされるクエリは、デバッガによる処理の対象とならないコードを生成します。

Visual Basic でのステップ実行

Visual Basic プログラムをステップ実行し、デバッガがクエリ宣言を検出すると、デバッガはその宣言にはステップ インせず、宣言全体を 1 つのステートメントとして強調表示します。この動作が発生するのは、クエリが呼び出されるまで評価されないためです。詳細については、「Visual Basic における LINQ の概要」を参照してください。

次のようなコードをステップ実行すると、クエリを作成するクエリ宣言が 1 つのステートメントとして強調表示されます。

Function MyFunction(ByVal x As Char)
    Return True
End Function

Sub Main()
    'Query creation
    Dim x = From it In "faoaoeua" _
            Where MyFunction(it) _
            Select New With {.a = it}

    ' Query execution
    For Each cur In x
        Console.WriteLine(cur.ToString())
    Next
End Sub

さらにステップ実行すると、For Each cur In x が強調表示されます。次のステップでは、デバッガが関数 MyFunction にステップ インします。MyFunction のステップ実行の後、デバッガは Console.WriteLine(cur.ToSting()) に戻ります。どの段階でも、デバッガはクエリ宣言内の述語コードにはステップ インしません。ただし、述語コードの評価は行います。

述語コードを関数に置き換えてステップ実行を可能にする (Visual Basic)

デバッグのために述語コードをステップ実行する必要がある場合は、述語コードを同じコードが含まれる関数の呼び出しに置き換えることができます。たとえば、次のようなコードがあるとします。

Dim items() as integer ={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

' Get the even numbers
Dim query = From nextInt in items Where nextInt Mod 2 = 0 Select nextInt

For each item in query
      Console.WriteLine(item)
Next

述語コードを次のように IsEven という新しい関数に移動できます。

Dim items Dim items () as integer ={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

' Get the even numbers
Dim query = From nextInt in items Where IsEven(nextInt) Select nextInt

For each item in query
      Console.WriteLine(item)
Next
... 
Function IsEven(item As =Integer) as Boolean
      Return item Mod 2 = 0
End Function

修正したクエリは、items のパスごとに関数 IsEven を呼び出します。デバッガ ウィンドウで各項目が指定された条件を満たすかどうかを確認し、IsEven 内のコードをステップ実行できます。この例の述語コードはきわめて単純です。もっと複雑な述語コードをデバッグする場合にも、この方法が十分役に立つことがあります。

参照

概念

LINQ でのエディット コンティニュ

LINQ クエリの概要

Visual Basic における LINQ の概要

その他の技術情報

LINQ のデバッグ