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

Cette rubrique fournit une brève introduction aux LINQ (Language Integrated Query)Language-Integrated Query (LINQ) expressions en Visual Basic et certains types d’opérations que vous effectuez dans une requête classiques.This topic provides a brief introduction to LINQ (Language Integrated Query)Language-Integrated Query (LINQ) expressions in Visual Basic, and to some of the typical kinds of operations that you perform in a query. Pour plus d’informations, consultez les rubriques suivantes :For more information, see the following topics:

Introduction à LINQ en Visual BasicIntroduction to LINQ in Visual Basic

RequêtesQueries

Procédure pas à pas : Écriture de requêtes dans Visual BasicWalkthrough: Writing Queries in Visual Basic

Spécification de la Source de données (à partir de)Specifying the Data Source (From)

Dans un LINQLINQ requête, la première étape consiste à spécifier la source de données que vous souhaitez interroger.In a LINQLINQ query, the first step is to specify the data source that you want to query. Par conséquent, le From clause dans une requête toujours en premier.Therefore, the From clause in a query always comes first. Opérateurs de requête sélectionnent et mettre en forme le résultat en fonction du type de la source.Query operators select and shape the result based on the type of the source.

Dim query = From cust In customers
'           ...

Le From clause spécifie la source de données customerset un variable de portée, cust.The From clause specifies the data source, customers, and a range variable, cust. La variable de portée est comme une variable d’itération de boucle, à ceci près que dans une expression de requête, aucune itération réelle ne se produit.The range variable is like a loop iteration variable, except that in a query expression, no actual iteration occurs. Lorsque la requête est exécutée, souvent à l’aide un For Each boucle, la variable de portée sert de référence pour chaque élément consécutif dans customers.When the query is executed, often by using a For Each loop, the range variable serves as a reference to each successive element in customers. Comme le compilateur déduit le type de cust, vous n’avez pas à le spécifier explicitement.Because the compiler can infer the type of cust, you do not have to specify it explicitly. Pour obtenir des exemples de requêtes écrites avec et sans type explicite, consultez relations des types dans les opérations de requête (Visual Basic).For examples of queries written with and without explicit typing, see Type Relationships in Query Operations (Visual Basic).

Pour plus d’informations sur l’utilisation de la From clause en Visual Basic, consultez Clause From.For more information about how to use the From clause in Visual Basic, see From Clause.

Filtrage des données (où)Filtering Data (Where)

Probablement l’opération de requête plus courante consiste à appliquer un filtre sous la forme d’une expression booléenne.Probably the most common query operation is applying a filter in the form of a Boolean expression. Puis, la requête retourne uniquement les éléments pour lesquels l’expression est vraie.The query then returns only those elements for which the expression is true. Un Where clause est utilisée pour effectuer le filtrage.A Where clause is used to perform the filtering. Le filtre spécifie les éléments de la source de données à inclure dans la séquence résultante.The filter specifies which elements in the data source to include in the resulting sequence. Dans l’exemple suivant, que les clients qui ont une adresse à Londres sont inclus.In the following example, only those customers who have an address in London are included.

Dim londonCusts = From cust In customers
                  Where cust.City = "London"
'                 ...

Vous pouvez utiliser des opérateurs logiques tels que And et Or pour combiner des expressions de filtre dans un Where clause.You can use logical operators such as And and Or to combine filter expressions in a Where clause. Par exemple, pour retourner uniquement les clients de Londres et dont le nom est Devon, utilisez le code suivant :For example, to return only those customers who are from London and whose name is Devon, use the following code:

Where cust.City = "London" And cust.Name = "Devon"   

Pour retourner les clients de Londres ou Paris, utilisez le code suivant :To return customers from London or Paris, use the following code:

Where cust.City = "London" Or cust.City = "Paris"   

Pour plus d’informations sur l’utilisation de la Where clause en Visual Basic, consultez une Clause Where.For more information about how to use the Where clause in Visual Basic, see Where Clause.

Classer des données (Order By)Ordering Data (Order By)

Il est souvent utile de trier les données retournées dans un ordre particulier.It often is convenient to sort returned data into a particular order. Le Order By clause triera les éléments de la séquence retournée à trier sur un ou plusieurs champs spécifiés.The Order By clause will cause the elements in the returned sequence to be sorted on a specified field or fields. Par exemple, la requête suivante trie les résultats selon la Name propriété.For example, the following query sorts the results based on the Name property. Étant donné que Name est une chaîne, les données retournées seront triées par ordre alphabétique, de A à Z.Because Name is a string, the returned data will be sorted alphabetically, from A to Z.

Dim londonCusts1 = From cust In customers
                   Where cust.City = "London"
                   Order By cust.Name Ascending
'                   ...

Pour trier les résultats dans l’ordre inverse, de Z à A, utilisez la clause Order By...Descending.To order the results in reverse order, from Z to A, use the Order By...Descending clause. La valeur par défaut est Ascending lorsque ni Ascending ni Descending est spécifié.The default is Ascending when neither Ascending nor Descending is specified.

Pour plus d’informations sur l’utilisation de la Order By clause en Visual Basic, consultez Clause Order By.For more information about how to use the Order By clause in Visual Basic, see Order By Clause.

Sélection de données (Select)Selecting Data (Select)

Le Select clause spécifie la forme et le contenu des éléments retournés.The Select clause specifies the form and content of returned elements. Par exemple, vous pouvez spécifier si vos résultats comprendra complète Customer d’objets, seul Customer propriété, un sous-ensemble de propriétés, une combinaison de propriétés à partir de diverses sources de données ou un nouveau type de résultat basé sur un calcul.For example, you can specify whether your results will consist of complete Customer objects, just one Customer property, a subset of properties, a combination of properties from various data sources, or some new result type based on a computation. Quand la clause Select produit autre chose qu’une copie de l’élément source, l’opération est appelée projection.When the Select clause produces something other than a copy of the source element, the operation is called a projection.

Pour récupérer une collection qui se compose de complet Customer objets, sélectionnez la variable de portée elle-même :To retrieve a collection that consists of complete Customer objects, select the range variable itself:

Dim londonCusts2 = From cust In customers
                   Where cust.City = "London"
                   Order By cust.Name Ascending
                   Select cust

Si un Customer instance est un objet qui compte de nombreux champs, et tout ce que vous souhaitez récupérer est le nom, vous pouvez sélectionner cust.Name, comme illustré dans l’exemple suivant.If a Customer instance is a large object that has many fields, and all that you want to retrieve is the name, you can select cust.Name, as shown in the following example. Inférence de type local reconnaît que cela modifie le type de résultat d’une collection de Customer objets à une collection de chaînes.Local type inference recognizes that this changes the result type from a collection of Customer objects to a collection of strings.

Dim londonCusts3 = From cust In customers
                   Where cust.City = "London"
                   Order By cust.Name Ascending
                   Select cust.Name

Pour sélectionner plusieurs champs à partir de la source de données, vous avez deux possibilités :To select multiple fields from the data source, you have two choices:

  • Dans le Select clause, spécifiez les champs que vous souhaitez inclure dans le résultat.In the Select clause, specify the fields you want to include in the result. Le compilateur définira un type anonyme qui a ces champs en tant que ses propriétés.The compiler will define an anonymous type that has those fields as its properties. Pour plus d’informations, consultez Types anonymes.For more information, see Anonymous Types.

    É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.Because the returned elements in the following example are instances of an anonymous type, you cannot refer to the type by name elsewhere in your code. Le nom désigné par le compilateur pour le type contient des caractères qui ne sont pas valides dans du code Visual Basic normal.The compiler-designated name for the type contains characters that are not valid in normal Visual Basic code. Dans l’exemple suivant, les éléments dans la collection retournée par la requête dans londonCusts4 sont des instances d’un type anonymeIn the following example, the elements in the collection that is returned by the query in londonCusts4 are instances of an anonymous type

    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-or-

  • Définir un type nommé qui contient les champs spécifiques que vous souhaitez inclure dans le résultat et créer et initialiser les instances du type dans le Select clause.Define a named type that contains the particular fields that you want to include in the result, and create and initialize instances of the type in the 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 passer en tant que paramètres dans les appels de méthode.Use this option only if you have to use individual results outside the collection in which they are returned, or if you have to pass them as parameters in method calls. Le type de londonCusts5 dans l’exemple suivant est IEnumerable (Of NamePhone).The type of londonCusts5 in the following example is 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 en Visual Basic, consultez Clause Select.For more information about how to use the Select clause in Visual Basic, see Select Clause.

Jointure de données (jointure et jointure groupée)Joining Data (Join and Group Join)

Vous pouvez combiner plusieurs sources de données dans le From clause de plusieurs façons.You can combine more than one data source in the From clause in several ways. Par exemple, le code suivant utilise deux sources de données et associe implicitement les propriétés des deux dans le résultat.For example, the following code uses two data sources and implicitly combines properties from both of them in the result. La requête sélectionne les étudiants dont le nom commence par une voyelle.The query selects students whose last names start with a vowel.

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

Notes

Vous pouvez exécuter ce code avec la liste d’étudiants créée dans Comment : Créer une liste d’éléments.You can run this code with the list of students created in How to: Create a List of Items.

Le Join mot clé est équivalente à une INNER JOIN dans SQL.The Join keyword is equivalent to an INNER JOIN in SQL. Il combine deux collections en fonction des valeurs de clés correspondantes entre les éléments dans les deux collections.It combines two collections based on matching key values between elements in the two collections. La requête retourne tout ou partie des éléments de collection qui ont des valeurs de clés correspondantes.The query returns all or part of the collection elements that have matching key values. Par exemple, le code suivant reproduit l’action de la jointure implicite précédente.For example, the following code duplicates the action of the previous implicit join.

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 collection hiérarchique unique, comme un LEFT JOIN dans SQL.Group Join combines collections into a single hierarchical collection, just like a LEFT JOIN in SQL. Pour plus d’informations, consultez Clause Join et Group Join, Clause.For more information, see Join Clause and Group Join Clause.

Regroupement de données (Group By)Grouping Data (Group By)

Vous pouvez ajouter un Group By clause pour regrouper les éléments dans un résultat de requête en fonction d’un ou plusieurs champs des éléments.You can add a Group By clause to group the elements in a query result according to one or more fields of the elements. Par exemple, le code suivant regroupe les étudiants par année de la classe.For example, the following code groups students by class year.

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 d’étudiants créée dans Comment : Créer une liste d’éléments, la sortie de la For Each instruction est :If you run this code using the list of students created in How to: Create a List of Items, the output from the For Each statement is:

Année : « Junior »Year: Junior

Tucker, MichaelTucker, Michael

Garcia, HugoGarcia, Hugo

Garcia, MarieGarcia, Debra

Tucker, LanceTucker, Lance

Année : SeniorYear: Senior

Omelchenko, Svetlana remarqueOmelchenko, Svetlana

Osada, MichikoOsada, Michiko

Fakhouri, FadiFakhouri, Fadi

Feng, HanyingFeng, Hanying

Adams, TerryAdams, Terry

Année : FreshmanYear: Freshman

Mortensen, SvenMortensen, Sven

Garcia, CesarGarcia, Cesar

La variante indiquée dans le code suivant trie les années de classe, puis trie les étudiants de chaque année par nom de famille.The variation shown in the following code orders the class years, and then orders the students within each year by last name.

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 Group By Clause.For more information about Group By, see Group By Clause.

Voir aussiSee also