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


Egyszerű lekérdezési műveletek (Visual Basic)

Ez a témakör röviden bemutatja a Visual Basic nyelvvel integrált lekérdezési (LINQ) kifejezéseit, valamint a lekérdezésekben végrehajtott tipikus műveletek némelyikét. További információért tekintse át az alábbi témaköröket:

A LINQ bemutatása a Visual Basicben

Lekérdezések

Útmutató: Lekérdezések írása a Visual Basicben

Az adatforrás megadása (forrás)

A LINQ-lekérdezések első lépése a lekérdezni kívánt adatforrás megadása. Ezért a From lekérdezések záradéka mindig az első. A lekérdezési operátorok a forrás típusa alapján választják ki és alakítják ki az eredményt.

Dim query = From cust In customers
'           ...

A From záradék az adatforrást customersés egy tartományváltozót custhatározza meg. A tartományváltozó olyan, mint egy ciklus iterációs változó, azzal a kivételrel, hogy egy lekérdezési kifejezésben nem történik tényleges iteráció. A lekérdezés végrehajtásakor , gyakran hurok For Each használatával, a tartományváltozó a függvény minden egymást követő elemére customersmutató hivatkozásként szolgál. Mivel a fordító ki tudja következtetni a típust cust, nem kell explicit módon megadnia. A lekérdezési műveletek (Visual Basic) típuskapcsolatai című témakörben talál példákat explicit beírással és anélkül írt lekérdezésekre.

A záradék Visual Basicben való használatáról további információt a From Záradékból című témakörben talál.

Adatok szűrése (hol)

Valószínűleg a leggyakoribb lekérdezési művelet egy szűrő logikai kifejezés formájában történő alkalmazása. A lekérdezés ezután csak azokat az elemeket adja vissza, amelyek esetében a kifejezés igaz. A Where szűrés végrehajtásához záradékot használunk. A szűrő megadja, hogy az adatforrás mely elemeit vegye fel az eredményként kapott sorrendbe. Az alábbi példában csak azokat az ügyfeleket soroljuk fel, akik Londonban rendelkeznek címmel.

Dim londonCusts = From cust In customers
                  Where cust.City = "London"
'                 ...

A logikai operátorok, például AndOr a szűrőkifejezések egy záradékban Where való kombinálására használhatók. Ha például csak azokat az ügyfeleket szeretné visszaadni, akik Londonból származnak, és akiknek a neve Devon, használja a következő kódot:

Where cust.City = "London" And cust.Name = "Devon"

Ha Londonból vagy Párizsból szeretne ügyfeleket visszaküldeni, használja a következő kódot:

Where cust.City = "London" Or cust.City = "Paris"

A záradék Visual Basicben való használatával Where kapcsolatos további információkért lásd a Hol található záradékot.

Adatok megrendelése (megrendelés szerint)

A visszaadott adatokat gyakran célszerű egy adott sorrendbe rendezni. A Order By záradék hatására a visszaadott sorozat elemei egy megadott mezőre vagy mezőre lesznek rendezve. Az alábbi lekérdezés például a tulajdonság alapján rendezi az Name eredményeket. Mivel Name egy sztringről van szó, a visszaadott adatok betűrendben lesznek rendezve, A-tól Z-ig.

Dim londonCusts1 = From cust In customers
                   Where cust.City = "London"
                   Order By cust.Name Ascending
'                   ...

Ha az eredményeket fordított sorrendben szeretné rendezni, Z-től A-ig, használja a záradékot Order By...Descending . Az alapértelmezett érték az, Ascending amikor nincs megadva és nincs AscendingDescending megadva sem.

A záradék Visual Basicben való használatáról további információt az Order By Order By Záradékban talál.

Adatok kiválasztása (Kiválasztás)

A Select záradék a visszaadott elemek formáját és tartalmát határozza meg. Megadhatja például, hogy az eredmények teljes Customer objektumokból, csak egy Customer tulajdonságból, a tulajdonságok részhalmazából, a különböző adatforrásokból származó tulajdonságok kombinációjából vagy egy számításon alapuló új eredménytípusból állnak-e. Ha a záradék nem Select a forráselem másolatát állítja elő, a műveletet kivetítésnek nevezzük.

Teljes Customer objektumokból álló gyűjtemény lekéréséhez válassza ki magát a tartományváltozót:

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

Ha egy Customer példány egy nagy objektum, amely sok mezővel rendelkezik, és csak a nevet szeretné lekérni, kiválaszthatja cust.Nameaz alábbi példában látható módon. A helyi típusú következtetés felismeri, hogy ez egy objektumgyűjtemény eredménytípusát Customer sztringgyűjteményre módosítja.

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

Ha több mezőt szeretne kijelölni az adatforrásból, két lehetőség közül választhat:

  • Select A záradékban adja meg az eredménybe felvenni kívánt mezőket. A fordító egy névtelen típust határoz meg, amelynek tulajdonságai ezek a mezők. További információ: Névtelen típusok.

    Mivel a következő példában szereplő visszaadott elemek névtelen típusú példányok, a kód más részein nem hivatkozhat név szerint a típusra. A típus fordító által megadott neve olyan karaktereket tartalmaz, amelyek nem érvényesek a normál Visual Basic-kódban. Az alábbi példában londonCusts4 a lekérdezés által visszaadott gyűjtemény elemei névtelen típusú példányok

    Dim londonCusts4 = From cust In customers
                       Where cust.City = "London"
                       Order By cust.Name Ascending
                       Select Name = cust.Name, Phone = cust.Phone
    
    For Each londonCust In londonCusts4
        Console.WriteLine(londonCust.Name & " " & londonCust.Phone)
    Next
    

    -vagy-

  • Adjon meg egy elnevezett típust, amely tartalmazza az eredménybe felvenni kívánt mezőket, és hozza létre és inicializálja a típuspéldányokat a Select záradékban. Ezt a lehetőséget csak akkor használja, ha a visszaadott gyűjteményen kívüli egyedi eredményeket kell használnia, vagy ha paraméterekként kell megadnia őket a metódushívásokban. Az alábbi példában szereplő típus londonCusts5 az IEnumerable(Of Name Telefon).

    Public Class NamePhone
        Public Name As String
        Public Phone As String
        ' Additional class elements
    End Class
    
    Dim londonCusts5 = From cust In customers
                       Where cust.City = "London"
                       Order By cust.Name Ascending
                       Select New NamePhone With {.Name = cust.Name,
                                                  .Phone = cust.Phone}
    

A záradék Visual Basicben való használatáról további információt a Select Záradék kiválasztása című témakörben talál.

Csatlakozás adatokhoz (Csatlakozás és csoportbeléptetés)

A záradékban From több adatforrást is kombinálhat többféleképpen. Az alábbi kód például két adatforrást használ, és implicit módon egyesíti mindkettő tulajdonságait az eredményben. A lekérdezés kiválasztja azokat a diákokat, akiknek a vezetéknevei magánhangzóval kezdődnek.

Dim vowels() As String = {"A", "E", "I", "O", "U"}
Dim vowelNames = From student In students, vowel In vowels
                 Where student.Last.IndexOf(vowel) = 0
                 Select Name = student.First & " " &
                 student.Last, Initial = vowel
                 Order By Initial

For Each vName In vowelNames
    Console.WriteLine(vName.Initial & ":  " & vName.Name)
Next

Feljegyzés

Ezt a kódot a How to: Create a List of Items (Elemlista létrehozása) című témakörben létrehozott tanulók listájával futtathatja.

A Join kulcsszó egyenértékű az SQL-ben lévővel INNER JOIN . Két gyűjteményt egyesít a két gyűjtemény elemeinek megfelelő kulcsértékek alapján. A lekérdezés az egyező kulcsértékekkel rendelkező gyűjteményelemek egészét vagy egy részét adja vissza. Az alábbi kód például duplikálja az előző implicit illesztés műveletét.

Dim vowelNames2 = From student In students
                  Join vowel In vowels
                  On student.Last(0) Equals vowel
                  Select Name = student.First & " " &
                  student.Last, Initial = vowel
                  Order By Initial

Group Join a gyűjteményeket egyetlen hierarchikus gyűjteménybe egyesíti, akárcsak az LEFT JOIN SQL-ben. További információ: Csatlakozás záradék és Csoportbeléptetési záradék.

Adatok csoportosítása (csoportosítási szempont)

A lekérdezés eredményében szereplő elemek csoportosításához záradékot Group By is hozzáadhat az elemek egy vagy több mezője szerint. Az alábbi kód például osztályév szerint csoportosítja a tanulókat.

Dim studentsByYear = From student In students
                     Select student
                     Group By year = student.Year
                     Into Classes = Group

For Each yearGroup In studentsByYear
    Console.WriteLine(vbCrLf & "Year: " & yearGroup.year)
    For Each student In yearGroup.Classes
        Console.WriteLine("   " & student.Last & ", " & student.First)
    Next
Next

Ha ezt a kódot a How to: Create a List of Items (Elemek listájának létrehozása) szakaszban létrehozott tanulók listájával futtatja, az utasítás kimenete a For Each következő:

Év: Junior

Tucker, Michael

Garcia, Hugo

Garcia, Debra

Tucker, Lance

Év: Szenior

Omelchenko, Svetlana

Osada, Michiko

Fakhouri, Fadi

Feng, Hanying

Adams, Terry

Év: Gólya

Mortensen, Sven

Garcia, Cesar

A következő kódban látható változat az osztályéveket rendeli meg, majd minden évben vezetéknév alapján rendeli meg a tanulókat.

Dim studentsByYear2 = From student In students
                      Select student
                      Order By student.Year, student.Last
                      Group By year = student.Year
                      Into Classes = Group

További információ: Group ByCsoportosítás záradék szerint.

Lásd még