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


Vetítési műveletek (Visual Basic)

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.

A Select() műveletét megjelenítő ábra

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.

A SelectMany() műveletét bemutató ábra.

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