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 |
![]() |
![]() |
![]() |
![]() |
Standard |
![]() |
![]() |
![]() |
![]() |
Pro e Team |
![]() |
![]() |
![]() |
![]() |
Legenda tabella:
![]() |
Applicabile |
![]() |
Non applicabile |
![]() |
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 a LINQ in Visual Basic