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
Ú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 cust
hatá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 customers
mutató 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 And
Or
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 Ascending
Descending
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.Name
az 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ányokDim 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ípuslondonCusts5
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 By
Csoportosítás záradék szerint.
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: