Schrittweise Ausführung und LINQ

Aktualisiert: November 2007

Dieses Thema gilt für folgende Anwendungsbereiche:

Edition

Visual Basic

C#

C++

Web Developer

Express

Standard

Pro und Team

Tabellenlegende:

Vorhanden

Nicht vorhanden

Befehl oder Befehle, die standardmäßig ausgeblendet sind.

Wenn Sie LINQ-Code debuggen, weist die schrittweise Ausführung teilweise ein abweichendes Verhalten auf, das Sie beachten sollten.

LINQ to SQL

In LINQ to SQL-Abfragen befindet sich der Prädikatcode außerhalb der Kontrolle des Debuggers. Deshalb können Sie keinen Einzelschritt in den Prädikatcode ausführen. Jede Abfrage, die in eine Ausdrucksbaumstruktur kompiliert wird, generiert Code, der sich außerhalb der Kontrolle des Debuggers befindet.

Schrittweise Ausführung in Visual Basic

Wenn der Debugger bei der schrittweisen Ausführung eines Visual Basic-Programms auf eine Abfragedeklaration trifft, wird kein Einzelschritt in die Deklaration ausgeführt, sondern die gesamte Deklaration als einzelne Anweisung hervorgehoben. Dieses Verhalten tritt auf, da die Abfrage erst bei ihrem Aufruf ausgewertet wird. Weitere Informationen hierzu finden Sie unter Einführung in LINQ in Visual Basic.

Wenn Sie den folgenden Beispielcode schrittweise durchlaufen, hebt der Debugger die Abfragedeklaration bzw. Abfrageerstellung als einzelne Anweisung hervor.

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

Beim nächsten Schritt hebt der Debugger For Each cur In x hervor. Im nächsten Schritt führt der Debugger einen Einzelschritt in die MyFunction-Funktion aus. Nach dem schrittweisen Durchlaufen von MyFunction führt der Debugger einen Rücksprung zu Console.WriteLine(cur.ToSting()) aus. Obwohl der Prädikatcode vom Debugger ausgewertet wird, wird zu keinem Zeitpunkt ein Einzelschritt in den Prädikatcode in der Abfragedeklaration ausgeführt.

Ersetzen eines Prädikats durch eine Funktion, um die schrittweise Ausführung zu ermöglichen (Visual Basic)

Falls Sie Prädikatcode zu Debugzwecken schrittweise durchlaufen müssen, können Sie das Prädikat durch den Aufruf einer Funktion ersetzen, die den ursprünglichen Prädikatcode enthält. Nehmen Sie z. B. an, Sie hätten folgenden Code:

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

Sie können den Prädikatcode in eine neue Funktion mit der Bezeichnung IsEven verschieben:

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

Die überarbeitete Abfrage ruft bei jedem Durchlauf von items die IsEven-Funktion auf. Mithilfe der Debuggerfenster können Sie feststellen, ob die einzelnen Elemente die angegebene Bedingung erfüllen und den Code in IsEven schrittweise ausführen. Das Prädikat in diesem Beispiel ist recht einfach gehalten. Falls Ihr zu debuggendes Prädikat jedoch komplizierter ist, kann diese Technik sehr hilfreich sein.

Siehe auch

Konzepte

Bearbeiten und Fortfahren mit LINQ

Einführung in LINQ-Abfragen

Einführung in LINQ in Visual Basic

Weitere Ressourcen

Debuggen von LINQ