LINQ : Language INtegrated Query

Présentation

Pourquoi tant de langages de requête ?

En 30 ans, les developpeurs se sont vu confrontés à la multiplication des sources de données :

Avec toutes ces méthodes de stockage des données, sont apparus les "langages" de requête permettant l'accès à ces informations. Avec les années, les développeurs sont contraints de connaitre environ 5 à 6 langages autour de leur langage de prédilection. On retrouve parmi les plus utilisés :

 

De nombreuses méthodes d'accès

Collections & boucles

List<string> parisian = new List<string>();
foreach (Customer c in GetCustomerList()) {
    if (c.City == "Paris" && c.Country = "France") {
        parisian.add(c.CompanyName);
    }
}
            

BDD & DataSet

// ... (overture de la base)
SqlDataAdapter MyAdapter = new SqlDataAdapter("SELECT product_name, units_in_stock, unit_price "
    + "FROM Customers as c WHERE c.city='Paris' AND c.country='France'", connection);
DataSet ds = new DataSet();
MyAdapter.Fill(ds);
//... (Fermeture de la base & traitement)
            

Framework ORM

ObjectQuery<Customers> customerQuery = context.Customer
    .Where("it.City = @city AND it.Country = @country",
    new ObjectParameter("city", "Paris"),
    new ObjectParameter("country", "France"));
            

XPath

XPathDocument doc = new XPathDocument("customers.xml");
XPathNavigator nav = doc.CreateNavigator();
XPathNodeIterator it = nav.Select("/customer[@city='Paris' and @country='France']");
foreach (XPathNavigator c in it) {
    parisian.Add(c.GetAttribute("companyName", ""));
}
            

LINQ, la solution

Abstraction par LINQ

Comme le montre le schéma ci-dessus, LINQ va permettre de s'abstraire de tous ces langages de requête contraignants. Avec LINQ et sa syntaxe unique, on va pouvoir accéder :

Petit historique

LINQ est issu de plusieurs projets de recherches proposés par le Microsoft Research Center. Dirigé par Cédric Fournet à L'INRIA depuis au moins 1995, join-calculus est à la base de LINQ. Ce projet est ensuite repris par le Microsoft Research Center au lancement du projet Poliphonic C# (travaux menés par Nick Benton, Luca Cardelli et Cédric Fournet). Le but est de proposer un nouveau modèle de concurrence pour les objets du framework .NET. Si vous souhaitez en savoir plus, rendez-vous sur le site officiel du projet.

Le projet Cω est un projet parallèle du Microsoft Research Center et des équipes Microsoft SQL Server. Leur idée était de développer une technique d'accès aux magasins de données la plus simple possible. D'abord connu sous les noms de X# ou Xen, le nom Cω est apparu lors de l'intégration de Poliphonic C#. On trouve un excellent article sur le site MSDN qui montre à l'aide d'exemples ce qu'apporte Cω, en faisant le parallèle avec les magasins de données.

Enfin, après toutes ces années de recherches, LINQ sort le 19 novembre 2007 intégré au framework .NET 3.5. PLINQ (Parallele LINQ) son successeur poursuit son développement pour intégrer un système d'exécution distribué des requêtes dans des environnements mutli-core et/ou multi-processeur.