AIDE .NET

C# Orderby (Comment ça marche pour les développeurs)

Jordi Bardia
Jordi Bardia
février 18, 2024
Partager:

Le tri est une opération fondamentale dans tout langage de programmation, et la méthode OrderBy de C# est un outil puissant pour classer des éléments dans des collections. Que vous travailliez avec des tableaux, des listes ou d'autres structures énumérables, la compréhension de l'utilisation de OrderBy peut grandement améliorer la lisibilité et la fonctionnalité de votre code.

Plus loin dans cet article, nous présenteronsBibliothèque IronPDF d'Iron Software et comment nous pouvons utiliser la méthode LINQ OrderBy et IronPDF pour générer des PDF formatés et triés.

Qu'est-ce que la méthode LINQ OrderBy ?

La méthode OrderBy fait partie de la méthode LINQ(Requête intégrée à la langue) la bibliothèque .NET en C# est spécialement conçue pour trier les éléments dans l'ordre croissant ; comme il s'agit de la méthode par défaut pour trier les données, il n'est pas nécessaire d'utiliser un mot-clé ascendant.

Comment utiliser la méthode LINQ OrderBy

Tri des données par ordre croissant

En C#, il existe deux façons d'appliquer cette méthode : par la syntaxe des méthodes ou la syntaxe des requêtes. Nous utiliserons la syntaxe de la méthode car elle est simple :

var sortedCollection = collection.OrderBy(item => item.OrderByProperty);
var sortedCollection = collection.OrderBy(item => item.OrderByProperty);

Ici, la collection est la collection source IEnumerable que vous voulez trier, et OrderByProperty est la propriété ou l'expression par laquelle vous voulez ordonner les éléments. La méthode d'extension de l'expression lambda dans OrderBy spécifie le critère de tri.

Tri des données par ordre décroissant

Pour trier par ordre décroissant, vous pouvez utiliser la méthode OrderByDescending en utilisant la syntaxe basée sur la méthode :

var sortedCollectionDesc = collection.OrderByDescending(item => item.OrderByProperty);
var sortedCollectionDesc = collection.OrderByDescending(item => item.OrderByProperty);

Tri des données en fonction de plusieurs critères

Dans le monde réel, il est souvent nécessaire de trier une collection sur la base de plusieurs critères. OrderBy permet cela en enchaînant plusieurs appels ThenBy ou ThenByDescending :

var multiSortedCollection = collection
    .OrderBy(item => item.OrderByProperty1)
    .ThenByDescending(item => item.OrderByProperty2);
var multiSortedCollection = collection
    .OrderBy(item => item.OrderByProperty1)
    .ThenByDescending(item => item.OrderByProperty2);

Dans cet exemple, la collection est d'abord triée par OrderByProperty1 dans l'ordre croissant. Ensuite, pour les éléments ayant la même valeur OrderByProperty1, ils sont triés par OrderByProperty2 dans l'ordre décroissant.

Comparateurs personnalisés

Pour des exigences de tri plus complexes, vous pouvez utiliser des comparateurs personnalisés. La méthode OrderBy vous permet de passer un IComparer`, comme le montre l'exemple suivant :

var customSortedCollection = collection.OrderBy(item => item.Property, new CustomComparer());
var customSortedCollection = collection.OrderBy(item => item.Property, new CustomComparer());

Ici, CustomComparer est une classe implémentant la classe IComparer`, fournissant une logique personnalisée pour la comparaison des éléments.

Exemple pratique : Trier des objets

Tri d'une liste d'entiers

using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 5, 2, 8, 1, 7 };
        var sortedNumbers = numbers.OrderBy(num => num);
        Console.WriteLine("Sorted Numbers:");
        foreach (var number in sortedNumbers)
        {
            Console.WriteLine(number);
        }
    }
}
using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
    static void Main()
    {
        List<int> numbers = new List<int> { 5, 2, 8, 1, 7 };
        var sortedNumbers = numbers.OrderBy(num => num);
        Console.WriteLine("Sorted Numbers:");
        foreach (var number in sortedNumbers)
        {
            Console.WriteLine(number);
        }
    }
}

Dans cet exemple, une liste d'entiers est triée par ordre croissant en utilisant OrderBy.

Trier une liste de chaînes de caractères

using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
    static void Main()
    {
        List<string> names = new List<string> { "Alice", "Charlie", "Bob", "David" };
        var sortedNames = names.OrderBy(name => name);
        Console.WriteLine("Sorted Names:");
        foreach (var name in sortedNames)
        {
            Console.WriteLine(name);
        }
    }
}
using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
    static void Main()
    {
        List<string> names = new List<string> { "Alice", "Charlie", "Bob", "David" };
        var sortedNames = names.OrderBy(name => name);
        Console.WriteLine("Sorted Names:");
        foreach (var name in sortedNames)
        {
            Console.WriteLine(name);
        }
    }
}

Cet exemple montre comment trier une liste de chaînes de caractères par ordre alphabétique croissant.

Trier une liste d'objets personnalisés

using System;
using System.Linq;
using System.Collections.Generic;
class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}
class Program
{
    static void Main()
    {
        List<Person> people = new List<Person>
        {
            new Person { FirstName = "John", LastName = "Doe", Age = 30 },
            new Person { FirstName = "Alice", LastName = "Smith", Age = 25 },
            new Person { FirstName = "Bob", LastName = "Johnson", Age = 35 }
        };
        var sortedPeople = people.OrderBy(person => person.Age);
        Console.WriteLine("Sorted People by Age:");
        foreach (var person in sortedPeople)
        {
            Console.WriteLine($"{person.FirstName} {person.LastName}, Age: {person.Age}");
        }
    }
}
using System;
using System.Linq;
using System.Collections.Generic;
class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}
class Program
{
    static void Main()
    {
        List<Person> people = new List<Person>
        {
            new Person { FirstName = "John", LastName = "Doe", Age = 30 },
            new Person { FirstName = "Alice", LastName = "Smith", Age = 25 },
            new Person { FirstName = "Bob", LastName = "Johnson", Age = 35 }
        };
        var sortedPeople = people.OrderBy(person => person.Age);
        Console.WriteLine("Sorted People by Age:");
        foreach (var person in sortedPeople)
        {
            Console.WriteLine($"{person.FirstName} {person.LastName}, Age: {person.Age}");
        }
    }
}

Dans cet exemple, une liste d'objets personnalisés Person est triée par ordre croissant sur la base de la propriété age.

La sortie suivante est visible dans la console

C# Orderby(Comment ça marche pour les développeurs) : Figure 1 - Sortie du code précédent triant les objets personnalisés

Manipulation des comparaisons de chaînes de caractères

Lorsqu'il s'agit de propriétés de type chaîne de caractères, il peut être utile d'assurer un tri insensible à la casse :

var sortedPeopleByName = people.OrderBy(person => person.LastName, StringComparer.OrdinalIgnoreCase);
var sortedPeopleByName = people.OrderBy(person => person.LastName, StringComparer.OrdinalIgnoreCase);

Cet exemple utilise StringComparer.OrdinalIgnoreCase pour effectuer un tri insensible à la casse basé sur la propriété LastName.

Considérations sur les performances

Bien que LINQ offre un moyen concis de trier les collections, il est essentiel de prendre en compte les implications en termes de performances, en particulier pour les grands ensembles de données. Pour les scénarios où les performances sont critiques, vous pouvez explorer des alternatives comme le tri sur place en utilisant la fonction List<T>méthode .Sort.

Présentation d'IronPDF

Découvrez les capacités d'IronPDF au sein de la bibliothèque C# PDF deIron Softwarela traduction doit être professionnelle, en préservant la précision technique tout en expliquant les caractéristiques et les avantages de ces outils de développement. Il est possible de convertir facilement en PDF des documents formatés contenant des informations de style. IronPDF peut générer des PDF à partir de chaînes HTML, ou télécharger le HTML à partir de l'URL, puis générer des PDF.

IronPDF se démarque lorsqu'il s'agit deconvertir HTML en PDF, en préservant toutes les mises en page et styles. Il peut générer des PDF à partir de divers contenus web, tels que des rapports, des factures et des documentations. L'outil fonctionne avec des fichiers HTML, des URL et des chaînes HTML pour créer des fichiers PDF.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}

Installation

IronPDF peut être installé à l'aide de la commandeConsole du gestionnaire de paquets NuGet ou en utilisant le gestionnaire de paquets Visual Studio.

dotnet add package IronPdf
dotnet add package IronPdf

Vous pouvez également installer IronPDF à l'aide du gestionnaire de paquets NuGet en recherchant "ironpdf" dans la barre de recherche.

C# Orderby(Comment ça marche pour les développeurs) : Figure 2 - Installation d'IronPDF à l'aide du gestionnaire de paquets NuGet

Génération d'un PDF à l'aide d'IronPDF

Vous trouverez ci-dessous le code permettant de générer un rapport PDF à l'aide d'une chaîne HTML et du générateur IronPDF :

// See https://aka.ms/new-console-template for more information
class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}
class Program
{
    static void Main()
    {
        List<Person> people = new List<Person>
        {
            new Person { FirstName = "John", LastName = "Doe", Age = 30 },
            new Person { FirstName = "Alice", LastName = "Smith", Age = 25 },
            new Person { FirstName = "Bob", LastName = "Johnson", Age = 35 }
        };
        var sortedPeople = people.OrderBy(person => person.Age);
        string name = "Sam";
        var count = people.Count;
        string content = $@"<!DOCTYPE html>
<html>
<body>
<h1>Hello, {name}!</h1>
<p>You have {count} people sorted by Age.</p>
" +
string.Join("\n", sortedPeople.Select(person => $"{person.FirstName} {person.LastName}, Age: {person.Age}"))
+ @"
</body>
</html>";
// Create a new PDF document
        var pdfDocument = new ChromePdfRenderer();
        pdfDocument.RenderHtmlAsPdf(content).SaveAs("personByAge.pdf");
    }
}
// See https://aka.ms/new-console-template for more information
class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}
class Program
{
    static void Main()
    {
        List<Person> people = new List<Person>
        {
            new Person { FirstName = "John", LastName = "Doe", Age = 30 },
            new Person { FirstName = "Alice", LastName = "Smith", Age = 25 },
            new Person { FirstName = "Bob", LastName = "Johnson", Age = 35 }
        };
        var sortedPeople = people.OrderBy(person => person.Age);
        string name = "Sam";
        var count = people.Count;
        string content = $@"<!DOCTYPE html>
<html>
<body>
<h1>Hello, {name}!</h1>
<p>You have {count} people sorted by Age.</p>
" +
string.Join("\n", sortedPeople.Select(person => $"{person.FirstName} {person.LastName}, Age: {person.Age}"))
+ @"
</body>
</html>";
// Create a new PDF document
        var pdfDocument = new ChromePdfRenderer();
        pdfDocument.RenderHtmlAsPdf(content).SaveAs("personByAge.pdf");
    }
}

Ici, nous générons d'abord une chaîne HTML à partir de sortedPeople qui est triée par ordre croissant avec tous les formats requis pour les rapports. Nous utilisons ensuite IronPDF pour générer un document PDF. Nous utilisons la méthode RenderHtmlAsPdf pour convertir la chaîne HTML en document PDF.

Sortie

Le résultat suivant est disponible dans le PDF.

C# Orderby(Comment ça marche pour les développeurs) : Figure 3 - PDF de sortie du code précédent

Licence (essai gratuit disponible)

Une clé d'essai peut être obtenue auprès deLicence d'essai d'IronPDF. Cette clé doit être placée dans appsettings.json.

"IronPdf.LicenseKey": "your license key"
"IronPdf.LicenseKey": "your license key"

Indiquez votre adresse électronique pour obtenir une licence d'essai.

Conclusion

La méthode OrderBy en C# est un outil polyvalent permettant de trier des collections en fonction de divers critères. Qu'il s'agisse de trier par ordre croissant ou décroissant, selon un ou plusieurs critères, ou d'utiliser des comparateurs personnalisés, la maîtrise de OrderBy peut améliorer considérablement la clarté et l'efficacité de votre code.

Ensemble avecBibliothèque IronPDF pour la génération de documents PDFl'utilisation d'une collection d'outils de développement, c'est une excellente combinaison pour générer une collection joliment formatée et triée sous la forme d'un document.

Jordi Bardia
Ingénieur logiciel
Jordi maîtrise parfaitement Python, C# et C++. Lorsqu'il ne met pas à profit ses compétences chez Iron Software, il se consacre à la programmation de jeux. Partageant des responsabilités en matière de tests de produits, de développement de produits et de recherche, Jordi apporte une valeur ajoutée considérable à l'amélioration continue des produits. Cette expérience variée le stimule et l'engage, et il dit que c'est l'un des aspects qu'il préfère dans son travail chez Iron Software. Jordi a grandi à Miami, en Floride, et a étudié l'informatique et les statistiques à l'université de Floride.
< PRÉCÉDENT
C# Dev Kit VS Code Extension (Comment ça marche pour les développeurs)
SUIVANT >
MSTest C# (Comment ça marche pour les développeurs)