Explorer facilement vos jeux de données avec LINQPad

LINQPad est un outil gratuit permettant de requêter rapidement et facilement un ensemble de données de type quelconque puis d’afficher le résultat en le formatant de manière propre et lisible.

Comme son nom l’indique, le langage de requête utilisé est LINQ (.NET Language-Integrated Query). La puissance de cet outil réside dans le fait qu’il est possible de requêter différents types de source de données en utilisant uniquement ce langage. Les principales sources de données supportées sont les suivantes :

  • Objets LINQ,
  • SQL, Entity Framework,
  • XML,
  • OData / WCF Data Services,
  • SQL Azure, SQL Table Storage, Oracle, SQLite, MySQL,
  • Microsoft StreamInsight,
  • Etc.

Lectrice ou lecteur de ce blog, vous l’aurez compris, ce qui nous intéresse particulièrement ici sont les flux de données OData (Open Data Protocol) tels que proposés nativement par la solution Open Data Clé en Main sous licence libre.

Nous allons donc pouvoir nous servir de LINQPad pour parcourir les différents jeux de données exposés par l’accélérateur OGDI DataLab de la solution et utiliser toute la puissance du langage LINQ pour filtrer, trier et arranger nos données comme bon nous semble.

LINQPad se présente sous la forme d’une application Windows. Elle est légère et très bien faite, vous pouvez la télécharger ici.

Etape 1 : Prise en main de LINQPad

Une fois l’application installée, lancez là. Elle se décompose en quatre sections que nous détaillons ci-dessous :

image

Liste des sources de données (zone 1)

En haut à gauche se trouve la liste de vos sources de données, qui est vide par défaut. Vous pouvez en ajouter plusieurs, de types différents.

En cliquant sur la petite icône image, vous accédez à la liste des jeux de données. Si vous cliquez à nouveau sur l’icône image d’un jeu de données, vous accédez à la liste des champs de celui-ci.

image

En faisant clic droit sur un jeu de données, il est possible d’exécuter directement une des requêtes de base, par exemple lister les 100 premiers enregistrements.

Liste des requêtes enregistrées (zone 2)

En bas à gauche se trouve deux onglets My Queries et Samples. LINQPad vous permet de sauvegarder des requêtes, elles se retrouveront ainsi dans l’onglet My Queries. Le second onglet contient une liste de requêtes d’exemple.

Les exemples sont très utiles pour comprendre le fonctionnement de LINQ mais aussi pour découvrir de nouvelles fonctionnalités.

Zone de requête (Zone 3)

La zone située en haut à droite est la zone où vous allez écrire vos requêtes LINQ. Vous avez la possibilité de choisir le langage ainsi que la source de données à utiliser pour votre requête.

Zone de résultat (zone 4)

Enfin en bas à droite se trouve la zone de résultat. C’est ici que s’affiche le résultat de votre requête une fois exécutée.

Il est possible de formater le résultat ainsi que de l’exporter vers plusieurs formats tels que Excel ou Word.

Dans le cas d’une colonne de type numérique, il est possible de l’afficher sous forme de graphique horizontal en cliquant sur l’icône image.

Etape 2 : Ajouter des sources de données

Avant de pouvoir requêter une source de données, il faut préalablement l’ajouter dans LINQPad. Pour ce faire, cliquez sur le lien Add connection en haut à gauche.

Une première fenêtre s’ouvre et propose une liste de drivers. Vous devez choisir le pilote correspondant au type de source de données que vous souhaitez ajouter. Dans notre cas, nous voulons requêter un service OData, nous choisissons donc le pilote WCF Data Services 5.4 (OData3) . Cliquez sur Next.

image

Dans la nouvelle fenêtre qui s’ouvre, copiez l’adresse de la source de données de votre choix dans le champ URI. Ce lien doit pointer vers un catalogue de données et non pas directement vers un service de données.

Dans le cas où votre service de données contient plusieurs catalogues (comme supporté par la plateforme de publication de données OGDI DataLab), vous devez ajouter autant de connections que de catalogues souhaités. Vous pouvez maintenant cliquer sur OK.

image

Votre source de données apparait maintenant dans la liste des sources de données disponibles.

Etape 3 : Requêtez, filtrez et organisez vos données

LINQ est un langage très puissant qui permet de requêter des données de la même manière que le permet le langage SQL avec les bases de données. Concrètement, dans le cas d’une source de données de type OData, LINQPad transforme une l’expression LINQ en une URL de requête OData.

Dans cette dernière étape, nous allons étudier des exemples d’utilisation de LINQPad. Nous utiliserons les données de notre instance de test de la plateforme de publication de données OGDI DataLab : https://ogdifrance.cloudapp.net:8080/v1/frOpenData.

Pour exécuter une requête, il suffit de l’écrire puis d’appuyer sur la touche F5 pour exécuter la requête. Le résultat s’affiche ensuite directement dans le cadre du dessous.

Vous avez la possibilité de changer le langage : C# Expression  pour une seule expression ou encore C# Statement(s) pour pouvoir écrire plusieurs lignes, déclarer des variables, etc.

Exemple : Le second tour des élections présidentielles de 2012

La requête élémentaire consiste à sélectionner tous les éléments d’un jeu de données :

from e in ElectionPresidentielle20122T

select e

On obtient ainsi les 1000 premiers éléments de notre jeu de données. Nous souhaitons affiner notre recherche pour ne retenir que les communes du département « LOT ». Notre requête devient donc :

from e in ElectionPresidentielle20122T

where e.departement == "LOT"

select e

LINQPad supporte la syntaxe de requête (celle utilisée ci-dessus) mais aussi la syntaxe de méthode. Nous pouvons donc écrire ceci, qui renvoie exactement le même résultat que précédemment :

ElectionPresidentielle20122T.Where(e => e.departement == "LOT")

Pour trier nos résultats, il suffit d’ajouter une condition orderby. Nous voulons classer nos résultats par nombre décroissant d’inscrit par commune, la requête devient :

from e in ElectionPresidentielle20122T

where e.departement == "LOT"

orderby e.inscrits descending

select e

Enfin, nous voulons filtrer nos colonnes pour que le résultat soit plus lisible. Nous en profitons pour ajouter deux colonnes « TauxAbstention » et « TauxNuls ».

from e in ElectionPresidentielle20122T

where e.departement == "LOT"

orderby e.inscrits descending

select new

{

        Departement = e.departement,

        CodeINSEE = e.codeinsee,

        Commune = e.commune,

        Inscrits = e.inscrits,

        Abstentions = e.abstentions,

        Votants = e.votants,

        Exprimes = e.exprimes,

        Nuls = e.nuls,

        TauxAbstention = (float)(e.abstentions) / (float)(e.inscrits) * 100,

        TauxNuls = (float)(e.nuls) / (float)(e.votants) * 100

}

On obtient un résultat lisible et riche en information. En cliquant sur les icones de nos deux nouvelles colonnes, nous faisons apparaitre une représentation graphique du résultat ce qui permet un aperçu rapide des tendances et des valeurs extrêmes.

image

Pour aller plus loin

La puissance de l’outil LINQPad permet d’aller bien plus loin dans la construction de vos requêtes LINQ. Il est possible d’écrire des requêtes complexes utilisant plusieurs variables, plusieurs sources de données pour de l’agrégation et même d’écrire du code C# pour manipuler des structures de données.

Pour en savoir plus sur ces requêtes, nous vous invitons à parcourir les différents exemples disponibles dans l’onglet Samples de la section contenant les requêtes enregistrées.

C’est un bon moyen d’explorer et de se rendre compte des vastes possibilités offertes par LINQPad et voir ainsi jusqu’où il est capable de vous accompagner. Bonne découverte :)