Revisão e LINQ
This topic applies to:
Edition |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
|||||
Pro, Premium e Ultimate |
Quando você está depurando o código do LINQ, revisão possui algumas diferenças de comportamento que você deve conhecer.
LINQ to SQL
LINQ to SQL consultas do, o código de predicado é além do controle do depurador. Portanto, é possível fazer o código de predicado. Qualquer consulta que é compilado em uma árvore de expressão produz um código que está além do controle do depurador.
Revisão em Visual Basic
Quando você está pulando através de um programa de Visual Basic e o depurador encontrar uma declaração de consulta, ele não entrar a declaração, mas destaca a declaração inteira como uma única instrução. Esse comportamento ocorre porque a consulta não é avaliada até que ele seja chamado. For more information, see Introdução ao LINQ no Visual Basic.
Se você percorrer o código de exemplo a seguir, o depurador realça a declaração de consulta ou a criação de consulta, como uma única instrução.
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 você entrar novamente, o depurador realça For Each cur In x. Na próxima etapa, ele passa para a função MyFunction. Após passando por MyFunction, ele salta para Console.WriteLine(cur.ToSting()). Em nenhum momento ele percorra o código de predicado na declaração da consulta, embora o depurador avaliar esse código.
Substituindo um predicado com uma função para ativar a revisão (Visual Basic)
Se você tiver para depurar o código de predicado para fins de depuração, você pode substituir o predicado com uma chamada para uma função que contém o código original de predicado. Por exemplo, suponha que você tenha 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
Você pode mover o código de predicado para uma nova função chamada 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
A consulta revisada chama a função IsEven cada vez que passa através do items. Você pode usar as janelas do depurador para ver se cada item atende a condição especificada, e você pode percorrer o código em IsEven. O predicado neste exemplo é bastante simple. No entanto, se você tiver um predicado mais difícil, que você deve depurar, essa técnica pode ser muito útil.
Consulte também
Conceitos
Introdução às consultas do LINQ (C#)
Introdução ao LINQ no Visual Basic