LINQ

LINQ est un acronyme pour Language Integrated Query. Il s'agit d'une extension du langage C# qui permet de manipuler des données de manière plus simple et plus lisible. LINQ permet de requêter des données de différentes sources (tableaux, listes, bases de données, etc.) en utilisant une syntaxe similaire à SQL.

Syntaxe

La syntaxe de base de LINQ est la suivante :

Prenons uen classe Confiture avec un champ Name et Year :

public class Confiture
{
    public string Name { get; set; }
    public int Year { get; set; }
}

Insérons quelques données dans une liste :

List<Confiture> confitures = new List<Confiture>
{
    new Confiture { Name = "Fraise", Year = 2020 },
    new Confiture { Name = "Fraise", Year = 2021 },
    new Confiture { Name = "Abricot", Year = 2021 },
    new Confiture { Name = "Mûre", Year = 2023 },
    new Confiture { Name = "Framboise", Year = 2021 },
    new Confiture { Name = "Framboise", Year = 2024 }
};

Si l'on souhaite récupérer les confitures de fraise :

List<Confiture> confitureDeFraises = confitures
    .Where(c => c.Name == "Fraise")
    .ToList();

Si l'on souhaite récupérer les confitures de fraise de 2021 :

List<Confiture> confitureDeFraises2021 = confitures
    .Where(c => c.Name == "Fraise" && c.Year == 2021)
    .ToList();
// ou en moins optimisé
List<Confiture> confitureDeFraises2021 = confitures
    .Where(c => c.Name == "Fraise")
    .Where(c => c.Year == 2021)
    .ToList();

Si l'on souhaite récupérer les confitures triées par année :

List<Confiture> confituresTriees = confitures
    .OrderBy(c => c.Year)
    .ToList();

On utilise Select pour sélectionner une propriété spécifique :

// Récupérer les noms des confitures
List<string> nomsConfitures = confitures
    .Select(c => c.Name)
    .ToList();

On peut combiner les méthodes :

// Récupérer les noms des confitures de fraise triées par année
string[] nomsConfituresFraise = confitures
    .Where(c => c.Name == "Fraise")
    .OrderBy(c => c.Year)
    .Select(c => c.Name)
    .ToArray();