Condividi tramite


LINQ ed esecuzione di istruzioni

Aggiornamento: novembre 2007

Le informazioni contenute in questo argomento sono valide per:

Edition

Visual Basic

C#

C++

Web Developer

Express

Argomento applicabile Argomento applicabile Argomento non applicabile Argomento applicabile

Standard

Argomento applicabile Argomento applicabile Argomento non applicabile Argomento applicabile

Pro e Team

Argomento applicabile Argomento applicabile Argomento non applicabile Argomento applicabile

Legenda tabella:

Argomento applicabile

Applicabile

Argomento non applicabile

Non applicabile

Argomento valido ma comando nascosto per impostazione predefinita

Comando o comandi nascosti per impostazione predefinita.

Nell'esecuzione del debug di codice LINQ, l'esecuzione di istruzioni presenta alcune differenze di comportamento di cui è necessario tenere conto.

LINQ to SQL

Nelle query LINQ to SQL il codice del predicato non è sotto il controllo del debugger e pertanto non è possibile eseguirne le istruzioni. Qualsiasi query compilata in una struttura ad albero dell'espressione produce un codice che non è sotto il controllo del debugger.

Esecuzione di istruzioni in Visual Basic

Se, durante l'esecuzione di istruzioni tramite un programma Visual Basic, il debugger rileva una dichiarazione della query, non esegue le istruzioni della dichiarazione ma evidenzia l'intera dichiarazione come un'unica istruzione. Tale comportamento si verifica perché la query non viene valutata fino al momento della chiamata. Per ulteriori informazioni, vedere la classe Introduzione a LINQ in Visual Basic.

Se si eseguono le istruzioni contenute nell'esempio di codice riportato di seguito, il debugger evidenzia la dichiarazione della query o la creazione della query come un'unica istruzione.

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

Quando si esegue nuovamente l'istruzione, il debugger evidenzia For Each cur In x. Nel passaggio successivo viene eseguita la funzione MyFunction. Dopo aver eseguito le istruzioni di MyFunction, il debugger passa di nuovo a Console.WriteLine(cur.ToSting()). Le istruzioni del codice del predicato della dichiarazione della query non vengono mai eseguite, anche se il codice viene valutato dal debugger.

Sostituzione di un predicato con una funzione per attivare l'esecuzione di istruzioni (Visual Basic)

Se è necessario eseguire le istruzioni del codice del predicato a fini di debug, è possibile sostituire il predicato con una chiamata a una funzione contenente il codice del predicato originale. Si supponga, ad esempio, di avere a disposizione il codice seguente:

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

È possibile spostare il codice del predicato in una funzione nuova, denominata 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 query modificata chiama la funzione IsEven a ogni passaggio attraverso l'oggetto items. È possibile utilizzare le finestre del debugger per verificare che ogni elemento soddisfi la condizione specificata ed eseguire il codice in IsEven. Il predicato contenuto nell'esempio riportato di seguito è abbastanza semplice. In presenza di un predicato più complesso di cui sia necessario eseguire il debug, tuttavia, questa tecnica può rivelarsi molto utile.

Vedere anche

Concetti

Modifica e continuazione con LINQ

Introduzione alle query LINQ

Introduzione a LINQ in Visual Basic

Altre risorse

Debug di LINQ