Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Projektion bezieht sich auf den Vorgang der Transformation eines Objekts in eine neue Form, die häufig nur aus diesen Eigenschaften besteht, die anschließend verwendet werden. Mithilfe der Projektion können Sie einen neuen Typ erstellen, der aus jedem Objekt erstellt wird. Sie können eine Eigenschaft projizieren und eine mathematische Funktion darauf ausführen. Sie können das ursprüngliche Objekt auch projizieren, ohne es zu ändern.
Die Standardmäßigen Abfrageoperatormethoden, die Projektion ausführen, sind im folgenden Abschnitt aufgeführt.
Methodik
| Methodenname | BESCHREIBUNG | Syntax des Visual Basic-Abfrageausdrucks | Mehr Informationen |
|---|---|---|---|
| Auswählen | Projiziert Werte, die auf einer Transformationsfunktion basieren. | Select |
Enumerable.Select Queryable.Select |
| SelectMany | Projiziert Sequenzen von Werten, die auf einer Transform-Funktion basieren, und fasst diese dann in eine Sequenz zusammen. | Verwenden mehrerer From Klauseln |
Enumerable.SelectMany Queryable.SelectMany |
| Schwirren | Erzeugt eine Abfolge von Tupeln mit Elementen aus 2-3 angegebenen Sequenzen. | Nicht zutreffend. | Enumerable.Zip Queryable.Zip |
Beispiele für die Abfrageausdruckssyntax
Auswählen
Im folgenden Beispiel wird die Select Klausel verwendet, um den ersten Buchstaben aus jeder Zeichenfolge in einer Liste von Zeichenfolgen zu projizieren.
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
Im folgenden Beispiel werden mehrere From Klauseln verwendet, um jedes Wort aus jeder Zeichenfolge in einer Liste von Zeichenfolgen zu projizieren.
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 im Vergleich zu SelectMany
Die Arbeit von beiden Select() und SelectMany() besteht darin, einen Ergebniswert (oder Werte) aus Quellwerten zu erzeugen.
Select() erzeugt einen Ergebniswert für jeden Quellwert. Das Gesamtergebnis ist daher eine Auflistung mit der gleichen Anzahl von Elementen wie die Quellauflistung. Im Gegensatz dazu erzeugt SelectMany() ein einziges Gesamtergebnis, das verkettete Unterkollektionen aus jedem Quellwert enthält. Die Transformationsfunktion, die als Argument an SelectMany() übergeben wird, muss eine aufzählbare Abfolge von Werten für jeden Quellwert zurückgeben. Diese aufzählbaren Sequenzen werden dann mit SelectMany() verkettet, um eine große Sequenz zu erstellen.
Die folgenden beiden Abbildungen zeigen den konzeptionellen Unterschied zwischen den Aktionen dieser beiden Methoden. Gehen Sie in jedem Fall davon aus, dass die Selektorfunktion (Transformation) das Array von Blumen aus jedem Quellwert auswählt.
Diese Abbildung zeigt, wie Select() eine Auflistung zurückgegeben wird, die dieselbe Anzahl von Elementen wie die Quellauflistung aufweist.
In dieser Abbildung wird dargestellt, wie SelectMany() die Zwischenabfolge von Arrays in einen Endergebniswert verkettet wird, der jeden Wert aus jedem Zwischenarray enthält.
Codebeispiel
Im folgenden Beispiel wird das Verhalten von Select() und SelectMany() verglichen. Der Code erstellt ein "Blumenstrauß", indem die Elemente aus jeder Liste der Blumennamen in der Quellsammlung entnommen werden. In diesem Beispiel ist der von der Transformationsfunktion Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>) verwendete Einzelne Wert selbst eine Sammlung von Werten. Dies erfordert die zusätzliche For Each Schleife, um jede Zeichenfolge in jeder Untersequenz aufzählen zu können.
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
Siehe auch
- System.Linq
- Übersicht über Standardabfrageoperatoren (Visual Basic)
- Select-Klausel
- Vorgehensweise: Kombinieren von Daten mit Joins
- Vorgehensweise: Auffüllen von Objektsammlungen aus mehreren Quellen (LINQ) (Visual Basic)
- Vorgehensweise: Zurückgeben eines LINQ-Abfrageergebnisses als bestimmter Typ
- Vorgehensweise: Aufteilen einer Datei in viele Dateien mithilfe von Gruppen (LINQ) (Visual Basic)