Vicode.
Couverture de Maîtriser LINQ en C#

Maîtriser LINQ en C#

2 min read·

Language Integrated Query (LINQ) apporte de puissantes capacités de requête directement intégrées au langage C#. Que vous manipuliez des collections en mémoire, analysiez du XML, ou communiquiez avec une base de données via Entity Framework, LINQ vous offre une syntaxe unifiée et très lisible.

Il existe deux manières d'écrire des requêtes LINQ : la Syntaxe de Requête (qui ressemble un peu à SQL) et la Syntaxe de Méthode (qui repose sur les méthodes d'extension et les expressions lambdas). La majeure partie du code C# moderne préfère la Syntaxe de Méthode.

Filtrage et Tri basiques

Commençons avec une simple liste de produits.

public record Product(int Id, string Name, decimal Price, string Category);

var products = new List<Product>
{
    new(1, "Laptop", 1200m, "Electronics"),
    new(2, "Mouse", 25m, "Electronics"),
    new(3, "Desk", 150m, "Furniture"),
    new(4, "Keyboard", 75m, "Electronics")
};

Si nous voulons trouver tous les produits électroniques à moins de 100$ et les trier par prix, nous pouvons utiliser Where et OrderBy :

var affordableElectronics = products
    .Where(p => p.Category == "Electronics" && p.Price < 100m)
    .OrderBy(p => p.Price)
    .ToList();

// affordableElectronics contiendra 'Mouse' et 'Keyboard'

Projection avec Select

Parfois, vous n'avez pas besoin de l'objet entier, mais juste d'une propriété spécifique ou d'un objet remodelé. La méthode Select est parfaite pour cela :

var productNames = products
    .Select(p => p.Name)
    .ToList();

// productNames est une List<string>

Vous pouvez même retourner des types anonymes :

var productSummaries = products
    .Select(p => new { p.Name, FormattedPrice = $"${p.Price}" })
    .ToList();

Groupement

Regrouper des données est tout aussi simple avec GroupBy. Par exemple, pour grouper les produits par catégorie :

var productsByCategory = products.GroupBy(p => p.Category);

foreach (var group in productsByCategory)
{
    Console.WriteLine($"Categorie : {group.Key}");
    foreach (var product in group)
    {
        Console.WriteLine($" - {product.Name}");
    }
}

LINQ est évalué de manière "paresseuse" (lazy evaluation ou deferred execution). La requête n'est réellement exécutée qu'au moment précis où vous l'itérez, ou via un appel direct à une méthode comme ToList(), ToArray(), ou Count().

S'abonner à la newsletter

Recevez un e-mail à chaque fois que je publie un nouvel article sur l'ingénierie logicielle, l'architecture et .NET. Jamais de spam.