Sdílet prostřednictvím


Ladění LINQ

Visual Studiopodporuje integrované ladění jazyka dotazu (LINQ) kód s určitými omezeními. Většina ladění pracovat s příkazy LINQ včetně krokování, nastavení zarážek a zobrazení výsledků v ladicí program systému windows.Toto téma popisuje hlavní omezení LINQ ladění.

V tomto tématu

Viewing LINQ Results

Popisuje zvláštní okolnosti při zobrazení výsledků dotazu LINQ v debuggeru.

Stepping and LINQ

Vysvětluje taktování chování při ladění LINQ.

Edit and Continue Not Supported for LINQ

Vysvětluje chování lze očekávat, že viz zkuste upravit kód LINQ ladíte.

Zobrazení výsledků LINQ

Výsledek příkazu LINQ můžete zobrazit pomocí dialogového okna QuickWatch, DataTips a okno kukátka.Při použití zdroje okno ponecháte ukazatel na dotazu v okně zdroj, zobrazí DataTip.Můžete kopírovat LINQ proměnné a vložit do okna kukátka nebo dialogové okno QuickWatch.

LINQ, v dotazu nebudou vyhodnoceny při vytvoření nebo deklarovaná, ale pouze v případě, že dotaz používá.Dotaz tedy nemá hodnotu, dokud je vyhodnocen.Úplný popis vytvoření dotazu a hodnocení viz Úvod do LINQ dotazy (C#) nebo Psaní prvního LINQ dotazu (Visual Basic).

Chcete-li zobrazit výsledek dotazu musí vyhodnotit ladicí program ji.Toto implicitní hodnocení dochází při zobrazení výsledků dotazu LINQ v debuggeru, má některé efekty, je třeba zvážit:

  • Každé hodnocení dotazu trvá.Rozbalení uzlu výsledky trvá.Pro některé dotazy opakované hodnocení může způsobit znatelné penalizace.

  • Vyhodnocení dotazu může mít za následek vedlejší účinky, které jsou změny hodnoty dat nebo stavu aplikace.Všechny dotazy mají vedlejší účinky.Chcete-li zjistit, zda dotaz může bezpečně vyhodnocen bez vedlejší účinky, musí porozumět kód, který implementuje dotazu.

Stepping a LINQ

Při ladění kódu LINQ krokování má některé behaviorální rozdíly, které byste měli vědět.

Bb385795.collapse_all(cs-cz,VS.110).gifLINQ to SQL

LINQ dotazů SQL v predikátu kód je mimo kontrolu ladicí program.Proto nelze krok do kódu predikátu.Vytvoří dotaz, který se kompiluje ke stromu výraz kód, který je mimo kontrolu ladicí program.

Bb385795.collapse_all(cs-cz,VS.110).gifKrokování v jazyce Visual Basic

Program Visual Basic jsou krokování a debugger nalezne prohlášení dotaz, není krok do prohlášení však zvýrazní celou prohlášení jako jediné prohlášení.K tomuto chování dochází, protože dotaz není vyhodnocena, dokud se nazývá.Další informace naleznete v tématu Úvod do jazyka Visual Basic LINQ.

Pokud krocích následující příklad kódu debugger zvýrazní dotazu prohlášení nebo vytváření dotazu jako jediné prohlášení.

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

Při kroku znovu zvýrazní ladicí program For Each cur In x.V dalším kroku kroky do funkce MyFunction.Po krokování MyFunction, jeho přejde zpět na Console.WriteLine(cur.ToSting()).V žádném bodě jej predikátu kód krokovat v prohlášení dotazu, ačkoli ladicí program vyhodnotí tento kód.

Bb385795.collapse_all(cs-cz,VS.110).gifNahrazení predikát funkce povolit taktování (Visual Basic)

Pokud chcete-li krokovat kód predikátu pro účely ladění, můžete nahradit predikátu volání funkce, která obsahuje původní kód predikátu.Předpokládejme například, že máte tento kód:

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

Predikátu kódu můžete přesunout do nové funkce nazývá 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

Upravený dotaz volá funkci IsEven na každém průchodu přes items.Ladicí program systému windows můžete použít zda každé položky splňuje zadanou podmínku a krokovat kód v IsEven.Predikát v tomto příkladu je poměrně jednoduchý.Však máte obtížnější predikát, který máte k ladění, může být tato technika velmi užitečné.

Upravit a nadále není podporována pro LINQ

Úpravy a pokračovat nepodporuje změny LINQ dotazy.Je-li přidat, odebrat nebo změnit příkaz LINQ během relace ladění, zobrazí se dialogové okno s upozorněním, že změna nepodporuje úpravy a pokračovat.V tomto okamžiku můžete buď vrátit zpět změny nebo ukončit relaci ladění a znovu spusťte novou relaci s upravenou kód.

Dále upravovat a pokračovat nepodporuje změnu typu nebo hodnotu proměnné, která se používá v příkazu LINQ.Znovu můžete vrátit zpět změny nebo zastavit a restartovat ladicí relace.

V jazyce C# nelze použít na libovolný kód v metodě, která obsahuje LINQ dotazu upravit a pokračovat.

V jazyce Visual Basic můžete upravit a pokračovat bez LINQ kódu i v metodu, která obsahuje LINQ dotaz.Můžete přidat nebo odebrat kód před příkaz LINQ, i v případě, že změny ovlivní číslo řádku LINQ dotazu.Jazyka Visual Basic ladění kódu než LINQ zkušenosti zůstává stejný, jako byl před LINQ byla zavedena.Nelze změnit, přidat nebo odebrat LINQ dotazu však, pokud chcete zastavit ladění aplikujte změny.

Viz také

Koncepty

Vedlejší účinky a výrazy

Výjimka zpracování (ladění)

Úvod do LINQ dotazy (C#)

Úvod do jazyka Visual Basic LINQ

Další zdroje

Debugging SQL

Příprava ladění: SQL Server projekty