Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
La projection fait référence à l’opération de transformation d’un objet en un nouveau formulaire qui se compose souvent uniquement de ces propriétés qui seront ensuite utilisées. À l’aide de la projection, vous pouvez construire un nouveau type généré à partir de chaque objet. Vous pouvez projeter une propriété et y effectuer une fonction mathématique. Vous pouvez également projeter l’objet d’origine sans le modifier.
Les méthodes d’opérateur de requête standard qui effectuent une projection sont répertoriées dans la section suivante.
Méthodes
| Nom de la méthode | Descriptif | Syntaxe de l’expression de requête Visual Basic | Plus d’informations |
|---|---|---|---|
| Sélectionnez | Projette des valeurs qui sont basées sur une fonction de transformation. | Select |
Enumerable.Select Queryable.Select |
| SelectMany | Projette des séquences de valeurs basées sur une fonction de transformation, puis les aplatit en une seule séquence. | Utiliser plusieurs From clauses |
Enumerable.SelectMany Queryable.SelectMany |
| Fermeture éclair | Produit une séquence de tuples dont les éléments proviennent de 2 ou 3 séquences spécifiées. | Non applicable. | Enumerable.Zip Queryable.Zip |
Exemples de syntaxe d’expression de requête
Sélectionnez
L’exemple suivant utilise la Select clause pour projeter la première lettre de chaque chaîne dans une liste de chaînes.
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
L’exemple suivant utilise plusieurs From clauses pour projeter chaque mot de chaque chaîne dans une liste de chaînes.
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
Sélectionner par rapport à SelectMany
Le travail des deux Select() et SelectMany() consiste à produire une valeur de résultat (ou des valeurs) à partir de valeurs sources.
Select() produit une valeur de résultat pour chaque valeur source. Le résultat global est donc une collection qui a le même nombre d’éléments que la collection source. En revanche, SelectMany() produit un résultat global unique qui contient des sous-collections concaténées à partir de chaque valeur source. La fonction de transformation qui est passée en tant qu'argument à SelectMany() doit retourner une séquence énumérable de valeurs pour chaque valeur source. Ces séquences énumérables sont ensuite concaténées SelectMany() pour créer une grande séquence.
Les deux illustrations suivantes montrent la différence conceptuelle entre les actions de ces deux méthodes. Dans chaque cas, supposons que la fonction (de transformation) du sélecteur sélectionne le tableau de fleurs (Flowers) à partir de chaque valeur source.
Cette illustration montre comment Select() retourne une collection qui a le même nombre d’éléments que la collection source.
Cette illustration montre comment SelectMany() concaténer la séquence intermédiaire de tableaux en une valeur de résultat finale qui contient chaque valeur de chaque tableau intermédiaire.
Exemple de code
L’exemple suivant compare le comportement de Select() et SelectMany(). Le code crée un « bouquet » de fleurs en prenant les éléments de chaque liste de noms de fleurs dans la collection source. Dans cet exemple, la « valeur unique » utilisée par la fonction Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>) de transformation est elle-même une collection de valeurs. Cela nécessite la boucle supplémentaire For Each afin d’énumérer chaque chaîne dans chaque sous-séquence.
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
Voir aussi
- System.Linq
- Vue d’ensemble des opérateurs de requête standard (Visual Basic)
- Select, clause
- Guide pratique : combiner des données avec des jointures
- Guide pratique pour remplir des collections d’objets à partir de plusieurs sources (LINQ) (Visual Basic)
- Guide pratique pour retourner un résultat de requête LINQ en tant que type spécifique
- Guide pratique pour fractionner un fichier en plusieurs fichiers à l’aide de groupes (LINQ) (Visual Basic)