Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

[Linq To WIQL] Les dessous d'un provider (Part 2: un peu de ménage!)

Avant de commencer à traiter les opérateurs, il faut faire un peu de ménage dans l'arbre d'expression et traiter ce qui est possible de traiter au moment de l'exécution avant même de créer la requête WIQL. Prenons cette requête:

            Node rootNode = nodes[nodes.Length - 1];

            var q = from wi in project.Get<Fissum.Model.Codeplex.WorkItem>()

                    where wi.Iteration.IsUnder(nodes[nodes.Length - 1])

                    select wi;

elle est équivalente en valeurs à :

            Node rootNode = nodes[nodes.Length - 1];

            var q = from wi in project.Get<Fissum.Model.Codeplex.WorkItem>()

                    where wi.Iteration.IsUnder(rootNode)

                    select wi;

En effet nodes[nodes.Lenght-1] n'a aucun rapport avec le WIQL et est seulement une expression locale qui doit être évaluée avant la création de la requête.

Ceci est le rôle de la classe Evaluator: la classe parcours l'arbre d'expression et déduit la partie qui peut être évaluée et renvoie une nouvelle expression avec les parties évaluées.  Cette évaluation est faîte au moment de la traduction, donc de l'exécution de la requête et donc pas au moment de la déclaration. C'est pour cela que l'exécution du code suivant renvoie une liste de 2 valeurs {1,2}:

List<int> list = new List<int>() { 1, 2, 3, 4, 5 };

 

int maxValue = 3;

 

var query = from i in list

            where i <= maxValue

            select i;

 

maxValue = 2;

 

var result = query.ToList();

 

La valeur de maxValue prise en compte est bien 2 et non 3.

 

A bientot pour la suite :)

Publié jeudi 4 décembre 2008 12:00 par Miiitch
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

Pas de commentaires
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Nouveau blog en anglais / New blog in english ! par Le blog de Patrick [MVP SharePoint] le il y a 18 heures et 53 minutes

- [ #Yammer ] From Mailbox to Yammer and back / De votre messagerie vers Yammer et retour ! par Le blog de Patrick [MVP SharePoint] le 09-15-2014, 11:31

- [ #Office 365 ] New service settings panel / Nouveau panneau de paramétrage des services par Le blog de Patrick [MVP SharePoint] le 09-11-2014, 08:50

- Problème de déploiement pour une démo SharePoint/TFS? par Blog de Jérémy Jeanson le 09-10-2014, 21:52

- [ #Office365 ] Delve first impressions / Premières impressions sur Delve par Le blog de Patrick [MVP SharePoint] le 09-09-2014, 16:57

- [ #Office365 ] How to change Administration console language ? / Comment changer la langue de la console d’administration ? par Le blog de Patrick [MVP SharePoint] le 09-09-2014, 08:25

- [ #SharePoint 2013 ] Suppression de bases de données en état “Pas de Réponse” par Le blog de Patrick [MVP SharePoint] le 09-04-2014, 14:10

- Changer l’adresse d’une ferme Office Web Apps associée à SharePoint par Blog de Jérémy Jeanson le 09-01-2014, 22:21

- Une ferme #SharePoint 2013 dans @Azure en quelques clics (1ère partie) ! par Le blog de Patrick [MVP SharePoint] le 08-28-2014, 18:52

- SharePoint 2013: Préparation de la migration - Création des site Templates dans 2010 et 2013 par Blog Technique de Romelard Fabrice le 08-20-2014, 16:31