Partager via


Opérations de requête de base (Visual Basic)

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

Requêtes

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, customerset 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 custle 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 anonyme

    Dim 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 de londonCusts5 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.

Voir aussi