Megosztás a következőn keresztül:


A LINQ-t támogató visual basic funkciók

A Language-Integrated Query (LINQ) név a Visual Basic olyan technológiáját jelenti, amely támogatja a lekérdezési szintaxist és más nyelvi szerkezeteket közvetlenül a nyelven. A LINQ használatával nem kell új nyelvet tanulnia a külső adatforrások lekérdezéséhez. A Visual Basic használatával lekérdezheti a relációs adatbázisokban, XML-tárolókban vagy objektumokban lévő adatokat. A lekérdezési képességek nyelvre való integrálása lehetővé teszi a szintaxishibák fordítási idejének ellenőrzését és a típusbiztonságot. Ez az integráció azt is biztosítja, hogy a Visual Basicben már tudja, mit kell tudnia a gazdag, változatos lekérdezések írásához.

Az alábbi szakaszok olyan nyelvi szerkezeteket mutatnak be, amelyek kellő részletességgel támogatják a LINQ-t ahhoz, hogy megkezdhesse a bevezető dokumentáció, a kódminták és a mintaalkalmazások olvasását. A hivatkozásokra kattintva részletesebb magyarázatokat találhat a nyelvi funkciók összevonásáról a nyelvvel integrált lekérdezés engedélyezéséhez. Jó kiindulópont az útmutató: Lekérdezések írása a Visual Basicben.

Lekérdezési kifejezések

A Visual Basic lekérdezési kifejezései az SQL-hez vagy az XQueryhez hasonló deklaratív szintaxissal fejezhetők ki. Fordításkor a lekérdezés szintaxisa metódushívásokká alakul át a LINQ-szolgáltató szabványos lekérdezési operátor-bővítménymetódusainak implementálásához. Az alkalmazások a megfelelő névtér utasítással Imports történő megadásával szabályozzák, hogy mely szabványos lekérdezési operátorok tartoznak a hatókörbe. A Visual Basic lekérdezési kifejezés szintaxisa így néz ki:

Dim londonCusts = From cust In customers
                  Where cust.City = "London"
                  Order By cust.Name Ascending
                  Select cust.Name, cust.Phone

További információ: Bevezetés a LINQ használatába a Visual Basicben.

Implicit módon beírt változók

Ahelyett, hogy explicit módon ad meg egy típust egy változó deklarálása és inicializálása során, engedélyezheti a fordító számára a típus kikövetkeztetését és hozzárendelését. Ezt nevezik helyi típusú következtetésnek.

A kikövetkeztetett típusú változók erősen be vannak adva, csakúgy, mint azok a változók, amelyek típusát explicit módon adja meg. A helyi típusú következtetés csak akkor működik, ha egy helyi változót definiál egy metódustörzsben. További információ: Option Infer Statement and Local Type Inference.

Az alábbi példa a helyi típusú következtetést szemlélteti. A példa használatához be kell állítania a következőt Option InferOn: .

' The variable aNumber will be typed as an integer.
Dim aNumber = 5

' The variable aName will be typed as a String.
Dim aName = "Virginia"

A helyi típusú következtetés lehetővé teszi névtelen típusok létrehozását is, amelyeket a szakasz későbbi részében ismertetünk, és amelyek a LINQ-lekérdezésekhez szükségesek.

A következő LINQ-példában a típuskövetkeztetés akkor következik be, ha Option Infer az vagy Off.On Fordítási időhiba akkor fordul elő, ha Option Infer van Off és Option Strict van Onis.

' Query example.
' If numbers is a one-dimensional array of integers, num will be typed
' as an integer and numQuery will be typed as IEnumerable(Of Integer)--
' basically a collection of integers.

Dim numQuery = From num In numbers
               Where num Mod 2 = 0
               Select num

Objektum-inicializálók

Az objektum-inicializálók akkor használatosak a lekérdezési kifejezésekben, ha névtelen típust kell létrehoznia a lekérdezés eredményeinek tárolásához. A névvel ellátott típusú objektumok lekérdezéseken kívüli inicializálására is használhatók. Objektum inicializáló használatával egyetlen sorban inicializálhat egy objektumot anélkül, hogy explicit módon konstruktort hívna meg. Feltételezve, hogy rendelkezik egy nyilvános Name és Phone tulajdonságokkal rendelkező osztálysalCustomer, valamint más tulajdonságokkal, az objektum inicializálója így használható:

Dim aCust = New Customer With {.Name = "Mike",
                               .Phone = "555-0212"}

További információ: Object Initializers: Named and Anonymous Types.

Névtelen típusok

A névtelen típusokkal kényelmesen csoportosíthat egy tulajdonságkészletet egy olyan elembe, amelyet bele szeretne foglalni egy lekérdezés eredményébe. Ez lehetővé teszi, hogy a lekérdezésben elérhető mezők tetszőleges kombinációját tetszőleges sorrendben válassza ki anélkül, hogy megnevezett adattípust határoz meg az elemhez.

A fordító dinamikusan létrehoz egy névtelen típust . A típus nevét a fordító rendeli hozzá, és minden egyes új fordításnál változhat. Ezért a név nem használható közvetlenül. A névtelen típusok inicializálása a következő módon zajlik:

' Outside a query.
Dim product = New With {.Name = "paperclips", .Price = 1.29}

' Inside a query.
' You can use the existing member names of the selected fields, as was
' shown previously in the Query Expressions section of this topic.
Dim londonCusts1 = From cust In customers
                   Where cust.City = "London"
                   Select cust.Name, cust.Phone

' Or you can specify new names for the selected fields.
Dim londonCusts2 = From cust In customers
                   Where cust.City = "London"
                   Select CustomerName = cust.Name,
                   CustomerPhone = cust.Phone

További információ: Névtelen típusok.

Bővítő metódusok

A bővítménymetelyek lehetővé teszik metódusok hozzáadását egy adattípushoz vagy interfészhez a definíción kívülről. Ez a funkció lehetővé teszi új metódusok hozzáadását egy meglévő típushoz anélkül, hogy ténylegesen módosítaná a típust. A standard lekérdezési operátorok maguk a bővítménymetenek olyan készletei, amelyek linq lekérdezési funkciókat biztosítanak minden implementált IEnumerable<T>típushoz. Egyéb bővítmények IEnumerable<T> : Count, Unionés Intersect.

Az alábbi bővítménymetódus egy nyomtatási metódust ad hozzá az String osztályhoz.

' Import System.Runtime.CompilerServices to use the Extension attribute.
<Extension()>
Public Sub Print(ByVal str As String)
    Console.WriteLine(str)
End Sub

A metódust úgy nevezzük, mint a következő szokásos példánymetódusát String:

Dim greeting As String = "Hello"
greeting.Print()

További információ: Bővítménymetenek.

Lambda-kifejezések

A lambda kifejezés egy név nélküli függvény, amely egyetlen értéket számít ki és ad vissza. A nevesített függvényekkel ellentétben a lambda kifejezés egyszerre definiálható és végrehajtható. Az alábbi példa a 4-et jeleníti meg.

Console.WriteLine((Function(num As Integer) num + 1)(3))

A lambda kifejezésdefiníciót hozzárendelheti egy változónévhez, majd a név használatával meghívhatja a függvényt. Az alábbi példa a 4-et is megjeleníti.

Dim add1 = Function(num As Integer) num + 1
Console.WriteLine(add1(3))

A LINQ-ban a lambda-kifejezések a szabványos lekérdezési operátorok közül számosat alávetnek. A fordító lambdakifejezéseket hoz létre az olyan alapvető lekérdezési módszerekben definiált számítások rögzítéséhez, mint Wherea , Select, Order By, Take Whileés mások.

Az alábbi kód például egy olyan lekérdezést határoz meg, amely az összes végzős diákot visszaadja a diákok listájából.

Dim seniorsQuery = From stdnt In students
                   Where stdnt.Year = "Senior"
                   Select stdnt

A lekérdezésdefiníció az alábbi példához hasonló kódba van lefordítva, amely két lambda kifejezéssel adja meg az argumentumokat Where és Selecta .

Dim seniorsQuery2 = students.
    Where(Function(st) st.Year = "Senior").
    Select(Function(s) s)

Bármelyik verzió futtatható egy For Each hurok használatával:

For Each senior In seniorsQuery
    Console.WriteLine(senior.Last & ", " & senior.First)
Next

További információ: Lambda Expressions.

Lásd még