Compartir a través de


Ejecutar paso a paso y LINQ

Actualización: noviembre 2007

Este tema se aplica a:

Edición

Visual Basic

C#

C++

Web Developer

Express

Standard

Pro y Team

Leyenda de la tabla:

Se aplica

No procede

Comando o comandos ocultos de manera predeterminada.

Al depurar el código LINQ, la ejecución paso a paso presenta algunas diferencias de comportamiento que debe tener en cuenta.

LINQ a SQL

En LINQ a consultas SQL, el código de predicado supera al control del depurador. Por consiguiente, no se puede realizar la ejecución paso a paso en el código de predicado. Cualquier consulta que compila a un árbol de expresiones genera código que supera al control del depurador.

Ejecutar paso a paso en Visual Basic

Cuando se ejecuta paso a paso a través de un programa de Visual Basic y el depurador encuentra una declaración de consulta, no avanza en la declaración pero resalta la declaración completa como una instrucción única. Este comportamiento se produce porque la consulta no se evalúa hasta que se llama. Para obtener más información, vea Introducción a LINQ en Visual Basic.

Si recorre el código de ejemplo siguiente, el depurador resalta la declaración de consulta, o creación de consulta, como una instrucción única.

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

Al avanzar de nuevo, el depurador resalta For Each cur In x. En el paso siguiente, avanza hasta la función MyFunction. Después de recorrer paso a paso MyFunction, ésta retrocede a Console.WriteLine(cur.ToSting()). En ningún punto se recorre paso a paso el código de predicado en la declaración de consulta, aunque el depurador evalúa ese código.

Reemplazar un predicado con una función para habilitar la ejecución paso a paso (Visual Basic)

Si tiene recorrer paso a paso el código de predicado con fines de depuración, puede reemplazar el predicado con una llamada a una función que contenga el código de predicado original. Por ejemplo, supongamos este código:

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

Puede mover el código de predicado a una nueva función, denominada 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 consulta revisada llama a la función IsEven en cada paso a través de items. Puede usar las ventanas del depurador para ver si cada elemento cumple la condición especificada, y puede recorres paso a paso el código en IsEven. El predicado en este ejemplo es bastante simple. Sin embargo, si tiene un predicado más complejo debe realizar la depuración, esta técnica puede ser muy útil.

Vea también

Conceptos

Editar y continuar con LINQ

Introducción a consultas con LINQ

Introducción a LINQ en Visual Basic

Otros recursos

Depurar LINQ