Exécution pas à pas et LINQ
Cette rubrique s'applique à :
Édition |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
|||||
Pro, Premium et Ultimate |
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 () 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. Vous pouvez utiliser les fenêtres du débogueur pour vérifier si chaque élément répond à la condition spécifiée. Vous pouvez également exécuter le code pas à pas 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 (C#)
Introduction à LINQ dans Visual Basic