Partager via


Tri des données

Mise à jour : novembre 2007

Une opération de tri permet de classer les éléments d'une séquence en fonction d'un ou de plusieurs attributs. Le premier critère de tri effectue un tri principal sur les éléments. En spécifiant un deuxième critère de tri, vous pouvez trier les éléments dans chaque groupe de tri principal.

L'illustration suivante présente les résultats d'une opération de tri alphabétique sur une séquence de caractères.

Opération de tri LINQ

Les méthodes d'opérateur de requête standard qui effectuent le tri des données sont répertoriées dans la section suivante.

Méthodes

Nom de la méthode

Description

Syntaxe d'expression de requête C#

Syntaxe d'expression de requête Visual Basic

Informations supplémentaires

OrderBy

Trie les valeurs dans l'ordre croissant.

orderby

Order By

Enumerable.OrderBy

Queryable.OrderBy

OrderByDescending

Trie les valeurs dans l'ordre décroissant.

orderby … descending

Order By … Descending

Enumerable.OrderByDescending

Queryable.OrderByDescending

ThenBy

Effectue un tri secondaire dans l'ordre croissant.

orderby …, …

Order By …, …

Enumerable.ThenBy

Queryable.ThenBy

ThenByDescending

Effectue un tri secondaire dans l'ordre décroissant.

orderby …, … descending

Order By …, … Descending

Enumerable.ThenByDescending

Queryable.ThenByDescending

Reverse

Inverse l'ordre des éléments dans une collection.

Non applicable.

Non applicable.

Enumerable.Reverse<TSource>

Queryable.Reverse<TSource>

Exemples de syntaxe d'expression de requête

Exemples de tri principal

Tri principal croissant

L'exemple suivant montre comment utiliser la clause orderby (Order By dans Visual Basic) dans une requête LINQ pour trier les chaînes d'un tableau par longueur de chaîne dans l'ordre croissant.

Dim words() As String = {"the", "quick", "brown", "fox", "jumps"}

Dim sortQuery = From word In words _
                Order By word.Length _
                Select word

Dim sb As New System.Text.StringBuilder()
For Each str As String In sortQuery
    sb.AppendLine(str)
Next

' Display the results.
MsgBox(sb.ToString())

' This code produces the following output:

' the
' fox
' quick
' brown
' jumps

string[] words = { "the", "quick", "brown", "fox", "jumps" };

IEnumerable<string> query = from word in words
                            orderby word.Length
                            select word;

foreach (string str in query)
    Console.WriteLine(str);

/* This code produces the following output:

    the
    fox
    quick
    brown
    jumps
*/

Tri principal décroissant

L'exemple suivant montre comment utiliser la clause descending (Order By Descending dans Visual Basic) orderby dans une requête LINQ pour trier les chaînes en fonction de leur première lettre dans l'ordre décroissant.

Dim words() As String = {"the", "quick", "brown", "fox", "jumps"}

Dim sortQuery = From word In words _
                Order By word.Substring(0, 1) Descending _
                Select word

Dim sb As New System.Text.StringBuilder()
For Each str As String In sortQuery
    sb.AppendLine(str)
Next

' Display the results.
MsgBox(sb.ToString())

' This code produces the following output:

' the
' quick
' jumps
' fox
' brown

string[] words = { "the", "quick", "brown", "fox", "jumps" };

IEnumerable<string> query = from word in words
                            orderby word.Substring(0, 1) descending
                            select word;

foreach (string str in query)
    Console.WriteLine(str);

/* This code produces the following output:

    the
    quick
    jumps
    fox
    brown
*/

Exemples de tri secondaire

Tri secondaire croissant

L'exemple suivant montre comment utiliser la clause orderby (Order By dans Visual Basic) dans une requête LINQ pour effectuer un tri principal et un tri secondaire des chaînes d'un tableau. Les chaînes sont d'abord triées par longueur puis en fonction de leur première lettre, dans l'ordre croissant à chaque fois.

Dim words() As String = {"the", "quick", "brown", "fox", "jumps"}

Dim sortQuery = From word In words _
                Order By word.Length, word.Substring(0, 1) _
                Select word

Dim sb As New System.Text.StringBuilder()
For Each str As String In sortQuery
    sb.AppendLine(str)
Next

' Display the results.
MsgBox(sb.ToString())

' This code produces the following output:

' fox
' the
' brown
' jumps
' quick

string[] words = { "the", "quick", "brown", "fox", "jumps" };

IEnumerable<string> query = from word in words
                            orderby word.Length, word.Substring(0, 1)
                            select word;

foreach (string str in query)
    Console.WriteLine(str);

/* This code produces the following output:

    fox
    the
    brown
    jumps
    quick
*/

Tri secondaire décroissant

L'exemple suivant montre comment utiliser la clause descending (Order By Descending dans Visual Basic) orderby dans une requête LINQ pour effectuer un tri principal dans l'ordre croissant et un tri secondaire dans l'ordre décroissant. Les chaînes sont d'abord triées par longueur, puis en fonction de leur première lettre.

Dim words() As String = {"the", "quick", "brown", "fox", "jumps"}

Dim sortQuery = From word In words _
                Order By word.Length, word.Substring(0, 1) Descending _
                Select word

Dim sb As New System.Text.StringBuilder()
For Each str As String In sortQuery
    sb.AppendLine(str)
Next

' Display the results.
MsgBox(sb.ToString())

' This code produces the following output:

' fox
' the
' quick
' jumps
' brown

string[] words = { "the", "quick", "brown", "fox", "jumps" };

IEnumerable<string> query = from word in words
                            orderby word.Length, word.Substring(0, 1) descending
                            select word;

foreach (string str in query)
    Console.WriteLine(str);

/* This code produces the following output:

    the
    fox
    quick
    jumps
    brown
*/

En savoir plus sur le tri des données

Voir aussi

Concepts

Vue d'ensemble des opérateurs de requête standard

Référence

orderby, clause (Référence C#)

Order By, clause (Visual Basic)

System.Linq