Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette rubrique fournit une brève introduction aux expressions LINQ (Language-Integrated Query) en Visual Basic et à certains des types d’opérations classiques que vous effectuez dans une requête. Pour plus d’informations, consultez les rubriques suivantes :
Présentation de LINQ dans Visual Basic
Procédure pas à pas : écriture de requêtes en Visual Basic
Spécification de la source de données (à partir de)
Dans une requête LINQ, la première étape consiste à spécifier la source de données à interroger. Par conséquent, la From
clause d’une requête est toujours disponible en premier. Les opérateurs de requête sélectionnent et forment le résultat en fonction du type de la source.
Dim query = From cust In customers
' ...
La From
clause spécifie la source de données, customers
et une variable de plage, cust
. La variable de plage est semblable à une variable d’itération de boucle, sauf que dans une expression de requête, aucune itération réelle ne se produit. Lorsque la requête est exécutée, souvent à l’aide d’une For Each
boucle, la variable de plage sert de référence à chaque élément successif dans customers
. Étant donné que le compilateur peut déduire le type de , vous n’avez pas besoin de cust
le spécifier explicitement. Pour obtenir des exemples de requêtes écrites avec et sans saisie explicite, consultez Relations de type dans les opérations de requête (Visual Basic).
Pour plus d’informations sur l’utilisation de la From
clause dans Visual Basic, consultez Clause From.
Filtrage des données (où)
Probablement l’opération de requête la plus courante consiste à appliquer un filtre sous la forme d’une expression booléenne. La requête retourne ensuite uniquement les éléments pour lesquels l’expression est vraie. Une Where
clause est utilisée pour effectuer le filtrage. Le filtre spécifie les éléments de la source de données à inclure dans la séquence résultante. Dans l’exemple suivant, seuls les clients qui ont une adresse à Londres sont inclus.
Dim londonCusts = From cust In customers
Where cust.City = "London"
' ...
Vous pouvez utiliser des opérateurs logiques tels que And
et Or
combiner des expressions de filtre dans une Where
clause. Par exemple, pour renvoyer uniquement les clients qui proviennent de Londres et dont le nom est Devon, utilisez le code suivant :
Where cust.City = "London" And cust.Name = "Devon"
Pour renvoyer des clients de Londres ou de Paris, utilisez le code suivant :
Where cust.City = "London" Or cust.City = "Paris"
Pour plus d’informations sur l’utilisation de la Where
clause dans Visual Basic, consultez La clause Where.
Classement des données (ordre par)
Il est souvent pratique de trier les données retournées dans un ordre particulier. La Order By
clause entraîne le tri des éléments de la séquence retournée sur un champ ou des champs spécifiés. Par exemple, la requête suivante trie les résultats en fonction de la Name
propriété. Étant donné qu’il Name
s’agit d’une chaîne, les données retournées sont triées par ordre alphabétique, de A à Z.
Dim londonCusts1 = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
' ...
Pour classer les résultats dans l’ordre inverse, de Z à A, utilisez la Order By...Descending
clause. La valeur par défaut est Ascending
quand ni Descending
ni n’est Ascending
spécifié.
Pour plus d’informations sur l’utilisation de la Order By
clause dans Visual Basic, consultez La clause Order By.
Sélection de données (sélectionner)
La Select
clause spécifie le formulaire et le contenu des éléments retournés. Par exemple, vous pouvez spécifier si vos résultats se composent d’objets complets Customer
, d’une Customer
seule propriété, d’un sous-ensemble de propriétés, d’une combinaison de propriétés provenant de différentes sources de données ou d’un nouveau type de résultat basé sur un calcul. Lorsque la Select
clause produit quelque chose d’autre qu’une copie de l’élément source, l’opération est appelée projection.
Pour récupérer une collection composée d’objets complets Customer
, sélectionnez la variable de plage elle-même :
Dim londonCusts2 = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
Select cust
Si une Customer
instance est un objet volumineux qui a de nombreux champs et que vous souhaitez récupérer est le nom, vous pouvez sélectionner cust.Name
, comme illustré dans l’exemple suivant. L’inférence de type local reconnaît que cela modifie le type de résultat d’une collection d’objets Customer
en une collection de chaînes.
Dim londonCusts3 = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
Select cust.Name
Pour sélectionner plusieurs champs dans la source de données, vous avez deux choix :
Dans la
Select
clause, spécifiez les champs que vous souhaitez inclure dans le résultat. Le compilateur définit un type anonyme qui a ces champs comme propriétés. Pour plus d’informations, consultez Types anonymes.Étant donné que les éléments retournés dans l’exemple suivant sont des instances d’un type anonyme, vous ne pouvez pas faire référence au type par nom ailleurs dans votre code. Le nom désigné par le compilateur pour le type contient des caractères non valides dans du code Visual Basic normal. Dans l’exemple suivant, les éléments de la collection retournés par la requête
londonCusts4
sont des instances d’un type anonymeDim 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
- ou -
Définissez un type nommé qui contient les champs particuliers que vous souhaitez inclure dans le résultat, puis créez et initialisez des instances du type dans la
Select
clause. Utilisez cette option uniquement si vous devez utiliser des résultats individuels en dehors de la collection dans laquelle ils sont retournés, ou si vous devez les transmettre en tant que paramètres dans les appels de méthode. Le type delondonCusts5
l’exemple suivant est IEnumerable(Of NamePhone).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}
Pour plus d’informations sur l’utilisation de la Select
clause dans Visual Basic, consultez Sélectionner une clause.
Jointure de données (jointure et jointure de groupe)
Vous pouvez combiner plusieurs sources de données dans la From
clause de plusieurs façons. Par exemple, le code suivant utilise deux sources de données et combine implicitement les propriétés des deux dans le résultat. La requête sélectionne les étudiants dont le nom commence par une voyelle.
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
Remarque
Vous pouvez exécuter ce code avec la liste des étudiants créés dans How to : Create a List of Items.
Le Join
mot clé est équivalent à un INNER JOIN
mot clé dans SQL. Il combine deux collections basées sur des valeurs de clé correspondantes entre les éléments des deux collections. La requête retourne toutes ou partie des éléments de collection qui ont des valeurs de clé correspondantes. Par exemple, le code suivant duplique l’action de la jointure implicite précédente.
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
combine des collections en une seule collection hiérarchique, comme dans SQL LEFT JOIN
. Pour plus d’informations, consultez Clause Join et Group Join Clause.
Regroupement de données (regrouper par)
Vous pouvez ajouter une Group By
clause pour regrouper les éléments dans un résultat de requête en fonction d’un ou de plusieurs champs des éléments. Par exemple, le code suivant regroupe les étudiants par année de classe.
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
Si vous exécutez ce code à l’aide de la liste des étudiants créés dans How to : Create a List of Items, la sortie de l’instruction For Each
est :
Année : Junior
Tucker, Michael
Garcia, Hugo
Garcia, Debra
Tucker, Lance
Année : Senior
Omelchenko, Svetlana
Osada, Michiko
Fakhouri, Fadi
Feng, Hanying
Adams, Terry
Année : Freshman
Mortensen, Sven
Garcia, Cesar
La variation indiquée dans le code suivant commande les années de classe, puis commande les étudiants dans chaque année par nom.
Dim studentsByYear2 = From student In students
Select student
Order By student.Year, student.Last
Group By year = student.Year
Into Classes = Group
Pour plus d’informations sur Group By
, consultez la clause Group By.