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 kivetítés egy objektum új formává alakításának műveletére utal, amely gyakran csak azokból a tulajdonságokból áll, amelyeket később használni fognak. A kivetítés használatával létrehozhat egy új típust, amely az egyes objektumokból épül fel. Kivetíthet egy tulajdonságot, és matematikai függvényt is végrehajthat rajta. Az eredeti objektumot módosítás nélkül is kivetítheti.
A vetítést végző szabványos lekérdezési operátor-metódusok a következő szakaszban találhatók.
Módszerek
| Metódus neve | Leírás | Visual Basic Query Expression Szintaxis | További információ |
|---|---|---|---|
| Válassza ki | Transzformációs függvényen alapuló projektek értékei. | Select |
Enumerable.Select Queryable.Select |
| SelectMany | Transzformációs függvényen alapuló értéksorozatokat projektel, majd egy sorozatba simítja őket. | Több From záradék használata |
Enumerable.SelectMany Queryable.SelectMany |
| Fütyülés | 2–3 megadott sorozat elemeit tartalmazó üstöksorozatot hoz létre. | Nem alkalmazható. | Enumerable.Zip Queryable.Zip |
Lekérdezési kifejezés szintaxisa – példák
Válassza ki
Az alábbi példa a Select záradék használatával veti ki az egyes sztringek első betűit a sztringek listájában.
Dim words = New List(Of String) From {"an", "apple", "a", "day"}
Dim query = From word In words
Select word.Substring(0, 1)
Dim sb As New System.Text.StringBuilder()
For Each letter As String In query
sb.AppendLine(letter)
Next
' Display the output.
MsgBox(sb.ToString())
' This code produces the following output:
' a
' a
' a
' d
SelectMany
Az alábbi példa több különböző From záradékot használ a sztringek listájában lévő minden sztring minden szavának kivetítéséhez.
Dim phrases = New List(Of String) From {"an apple a day", "the quick brown fox"}
Dim query = From phrase In phrases
From word In phrase.Split(" "c)
Select word
Dim sb As New System.Text.StringBuilder()
For Each str As String In query
sb.AppendLine(str)
Next
' Display the output.
MsgBox(sb.ToString())
' This code produces the following output:
' an
' apple
' a
' day
' the
' quick
' brown
' fox
Select és SelectMany összehasonlítása
Mindkettő Select() feladata, hogy SelectMany() eredményértéket (vagy értékeket) állít elő a forrásértékekből.
Select() minden forrásértékhez egy eredményértéket állít elő. Az összesített eredmény tehát egy olyan gyűjtemény, amelynek ugyanannyi eleme van, mint a forrásgyűjteménynek. Ezzel szemben egyetlen összesített eredményt hoz létre, SelectMany() amely az egyes forrásértékekből származó összefűzött részgyűjteményeket tartalmazza. Az argumentumként átadott átalakítási függvénynek SelectMany() az egyes forrásértékek számbavételes értéksorát kell visszaadnia. Ezeket az enumerálható sorozatokat ezután összefűzve SelectMany() létrehoz egy nagy sorozatot.
Az alábbi két ábra a két módszer műveletei közötti fogalmi különbséget mutatja be. Tegyük fel, hogy a választó (átalakító) függvény minden egyes forrásértékből kiválasztja a virágtömböt.
Ez az ábra azt mutatja be, hogyan Select() ad vissza egy olyan gyűjteményt, amelynek ugyanannyi eleme van, mint a forrásgyűjteménynek.
Ez az ábra bemutatja, hogyan SelectMany() fűzi össze a tömbök köztes sorozatát egy végső eredményértékbe, amely az egyes köztes tömbök minden értékét tartalmazza.
Kódpélda
Az alábbi példa a Select() és a SelectMany() viselkedését hasonlítja össze. A kód egy virágcsokrot hoz létre úgy, hogy a forrásgyűjteményben lévő virágnevek minden egyes listájából eltávolítja az elemeket. Ebben a példában az átalakító függvény Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>) által használt "egyetlen érték" önmagában értékgyűjtemény. Ehhez további For Each ciklusra van szükség az egyes karakterláncok számbavételéhez az egyes részszekvenciákban.
Class Bouquet
Public Flowers As List(Of String)
End Class
Sub SelectVsSelectMany()
Dim bouquets = New List(Of Bouquet) From {
New Bouquet With {.Flowers = New List(Of String)(New String() {"sunflower", "daisy", "daffodil", "larkspur"})},
New Bouquet With {.Flowers = New List(Of String)(New String() {"tulip", "rose", "orchid"})},
New Bouquet With {.Flowers = New List(Of String)(New String() {"gladiolis", "lily", "snapdragon", "aster", "protea"})},
New Bouquet With {.Flowers = New List(Of String)(New String() {"larkspur", "lilac", "iris", "dahlia"})}}
Dim output As New System.Text.StringBuilder
' Select()
Dim query1 = bouquets.Select(Function(b) b.Flowers)
output.AppendLine("Using Select():")
For Each flowerList In query1
For Each str As String In flowerList
output.AppendLine(str)
Next
Next
' SelectMany()
Dim query2 = bouquets.SelectMany(Function(b) b.Flowers)
output.AppendLine(vbCrLf & "Using SelectMany():")
For Each str As String In query2
output.AppendLine(str)
Next
' Display the output
MsgBox(output.ToString())
' This code produces the following output:
'
' Using Select():
' sunflower
' daisy
' daffodil
' larkspur
' tulip
' rose
' orchid
' gladiolis
' lily
' snapdragon
' aster
' protea
' larkspur
' lilac
' iris
' dahlia
' Using SelectMany()
' sunflower
' daisy
' daffodil
' larkspur
' tulip
' rose
' orchid
' gladiolis
' lily
' snapdragon
' aster
' protea
' larkspur
' lilac
' iris
' dahlia
End Sub
Lásd még
- System.Linq
- Standard lekérdezési operátorok áttekintése (Visual Basic)
- Kijelölési záradék
- Útmutató: Adatok kombinálása illesztésekkel
- Útmutató: Objektumgyűjtemények feltöltése több forrásból (LINQ) (Visual Basic)
- Útmutató: LINQ-lekérdezés eredményének visszaadása adott típusként
- Útmutató: Fájl felosztása több fájlra csoportok (LINQ) használatával (Visual Basic)