Partager via


Exécution pas à pas et LINQ

Mise à jour : novembre 2007

Cette rubrique s'applique à :

Édition

Visual Basic

C#

C++

Web Developer

Express

La rubrique s'applique La rubrique s'applique La rubrique ne s'applique pas La rubrique s'applique

Standard

La rubrique s'applique La rubrique s'applique La rubrique ne s'applique pas La rubrique s'applique

Pro et Team

La rubrique s'applique La rubrique s'applique La rubrique ne s'applique pas La rubrique s'applique

Légende du tableau :

La rubrique s'applique

Applicable

La rubrique ne s'applique pas

Non applicable

La rubrique s'applique mais la commande est masquée par défaut

Commande ou commandes masquées par défaut.

Lorsque vous déboguez du code LINQ, l'exécution pas à pas présente des différences de comportement que vous devez connaître.

LINQ to SQL

Dans les requêtes LINQ to SQL, le code de prédicat n'est pas contrôlé par le débogueur. Par conséquent, vous ne pouvez pas effectuer d'exécution pas à pas du code de prédicat. Toute requête compilée en une arborescence de l'expression génère du code qui n'est pas contrôlé par le débogueur.

Exécution pas à pas dans Visual Basic

Lorsque vous exécutez un programme Visual Basic pas à pas, si le débogueur rencontre une déclaration de requête, il n'effectue pas de pas à pas détaillé dans la déclaration, mais met en surbrillance la déclaration entière en tant qu'instruction unique. Ce comportement se produit car la requête n'est évaluée que lorsqu'elle est appelée. Pour plus d'informations, consultez Introduction à LINQ dans Visual Basic.

Si vous effectuez un pas à pas dans l'exemple de code suivant, le débogueur met en surbrillance la déclaration de requête (Query creation) en tant qu'instruction unique.

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

Lors de la prochaine exécution pas à pas, le débogueur met en surbrillance For Each cur In x. À l'étape suivante, il effectue un pas à pas détaillé dans la fonction MyFunction. Après la fonction MyFunction, il revient à Console.WriteLine(cur.ToSting()). À aucun moment, le débogueur n'effectue de pas à pas détaillé dans le code de prédicat dans la déclaration de requête, alors qu'il évalue ce code.

Remplacement d'un prédicat par une fonction pour activer l'exécution pas à pas (Visual Basic)

Si vous devez effectuer un pas à pas détaillé d'un code de prédicat à des fins de débogage, vous pouvez remplacer le prédicat par un appel d'une fonction qui contient le code de prédicat d'origine. Par exemple, si vous avez le code suivant :

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

Vous pouvez déplacer le code de prédicat vers une nouvelle fonction, appelée 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

La requête modifiée appelle la fonction IsEven à chaque passe dans items. Grâce aux fenêtres du débogueur, vous pouvez savoir si chaque élément répond à la condition spécifiée et vous pouvez effectuer un pas à pas détaillé du code dans IsEven. Dans cet exemple, le prédicat est assez simple. Toutefois, si vous devez déboguer un prédicat plus complexe, cette technique peut s'avérer très utile.

Voir aussi

Concepts

Modifier & Continuer avec LINQ

Introduction aux requêtes LINQ

Introduction à LINQ dans Visual Basic

Autres ressources

Débogage de LINQ