次の方法で共有


ステップ実行と LINQ

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

エディション

Visual Basic

C#

F#

C++

Web Developer

Express

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

Pro、Premium、Ultimate

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

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 () 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 クエリの概要 (C#)

Visual Basic における LINQ の概要

その他の技術情報

LINQ のデバッグ