Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Visual Studio bizonyos korlátozásokkal támogatja a nyelvi integrált lekérdezési (LINQ) kód hibakeresését. A legtöbb hibakeresési funkció LINQ-utasításokkal működik, beleértve a lépcsőzést, a töréspontok beállítását és az eredmények hibakereső ablakokban való megtekintését. Ez a témakör a LINQ-hibakeresés főbb korlátait ismerteti.
LINQ-eredmények megtekintése
A LINQ-utasítás eredményét az Adatleírások, a Figyelő ablak és a Gyorsóra párbeszédpanel használatával tekintheti meg. Ha forrásablakot használ, szüneteltetheti az egérmutatót egy lekérdezésen a forrásablakban, és megjelenik egy adatleírás. A LINQ-változót átmásolhatja és beillesztheti a Figyelés ablakba vagy a Gyorsóra párbeszédpanelre.
A LINQ-ban a lekérdezések létrehozásakor vagy deklarálásakor a rendszer nem értékeli ki a lekérdezést, csak akkor, ha a lekérdezést használják. Ezért a lekérdezés nem rendelkezik értékkel, amíg ki nem értékeli. A lekérdezések létrehozásának és kiértékelésének teljes leírását a Bevezetés a LINQ-lekérdezések (C#) vagy Az első LINQ-lekérdezés írásacímű témakörben talál.
A hibakeresőnek ki kell értékelnie a lekérdezést ahhoz, hogy annak eredményét megjeleníthesse. Ennek az implicit kiértékelésnek, amely a LINQ-lekérdezés eredményének a hibakeresőben való megtekintésekor fordul elő, figyelembe kell vennie néhány effektust:
A lekérdezés minden kiértékelése időt vesz igénybe. Az eredménycsomópont kibontása időt vesz igénybe. Egyes lekérdezések esetén az ismételt értékelés észrevehető teljesítménybírságot eredményezhet.
A lekérdezés kiértékelése mellékhatásokat okozhat, amelyek az adatok értékének vagy a program állapotának változásai. Nem minden lekérdezésnek vannak mellékhatásai. Annak megállapításához, hogy a lekérdezések biztonságosan kiértékelhetők-e mellékhatások nélkül, ismernie kell a lekérdezést megvalósító kódot.
Lépésről lépésre haladás és LINQ
A LINQ-kód hibakeresésekor a lépcsőzésnek van néhány viselkedésbeli különbsége, amiről tudnia kell.
LINQ to SQL
A LINQ-ból SQL-lekérdezésekbe a predikátumkód nem szabályozható a hibakereső számára. Ezért nem léphet a predikátumkódba. A kifejezésfára lefordított lekérdezések olyan kódot eredményeznek, amely nem szabályozható a hibakereső számára.
Lépéslépés a Visual Basicben
Amikor egy Visual Basic-programon lép át, és a hibakereső lekérdezési deklarációval találkozik, az nem lép a deklarációba, hanem egyetlen utasításként emeli ki a teljes deklarációt. Ez a viselkedés azért fordul elő, mert a lekérdezés nem lesz kiértékelve, amíg meg nem hívják. További információ: Bevezetés a LINQ és a Visual Basic témakörébe.
Ha végiglép a következő példakódon, a hibakereső egyetlen utasításként emeli ki a lekérdezésdeklarációt vagy a lekérdezés létrehozását.
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
Amikor ismét lép, a hibakereső kiemeli For Each cur In x. A következő lépésben belép a függvény MyFunction-ba. A MyFunctionlépése után visszaugrik a Console.WriteLine(cur.ToSting())-re. A lekérdezési deklaráció predikátumkódját egy ponton sem lépi át, bár a hibakereső kiértékeli ezt a kódot.
Predikátum helyettesítése egy függvénnyel a léptetés engedélyezéséhez (Visual Basic)
Ha hibakeresési célokból át kell haladnia a predikátumkódon, lecserélheti a predikátumot egy olyan függvény hívására, amely az eredeti predikátumkódot tartalmazza. Tegyük fel például, hogy rendelkezik ezzel a kóddal:
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
A predikátumkódot áthelyezheti egy új, IsEvennevű függvénybe:
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 módosított lekérdezés az IsEvenminden iterációján meghívja a items függvényt. A hibakereső ablakokkal ellenőrizheti, hogy az egyes elemek megfelelnek-e a megadott feltételnek, és végiglépkedhet a kódon a IsEven-ban. A példában szereplő predikátum meglehetősen egyszerű. Azonban, ha van egy nehezebb predikátum, amit hibakeresned kell, ez a technika nagyon hasznos lehet.
A LINQ szerkesztése és folytatása nem támogatott.
A Szerkesztés és a Folytatás korlátozásokkal támogatja a LINQ-lekérdezések módosításait. További információ: EnC által támogatott módosítások