Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Abonnements

ALT .NET Demo

Mercredi dernier, j'ai animé une session pour la communauté ALT .NET sur Entity Framework.

Lors de cette session, j'ai notamment fait une demo avec du WCF, de l'Entity Framework avec du POCO et un pseudo provider LINQ côté client. Ce provider est particulièrement simpliste (développé en seulement 15 mins), n'est pas thread safe mais a l'intéressante particularité de laisser LINQ To Object prendre le relais quand mon provider LINQ ne sait pas gérer.

J'aimerais revenir sur le fonctionnement de mon provider LINQ qui est un peu particulier et plus précisément sur ce code :

public static class CategoryClient

{

    public static MyQueryable<Category> Categories

    {

        get

        {

            ClientLINQ.AllEntities = true;

            return GetCategories().ToMyQueryable();

        }

    }

 

    private static IEnumerable<Category> GetCategories()

    {

        List<Category> value;

        if (ClientLINQ.AllEntities)

            value = Context.Instance.CategoryContract.GetAllCategories();

        else

            value = Context.Instance.CategoryContract.GetCategories(ClientLINQ.IncludeValues, ClientLINQ.WhereValue, ClientLINQ.OrderByValue, ClientLINQ.SkipValue, ClientLINQ.TakeValue);

        foreach (var category in value)

            yield return category;

    }

}

Comment ce code marche ? Comment alors que le set de AllEntities à true réinitialise les propriétés IncludeValues, WhereValues, etc

IncludeValues = null;

WhereValue = null;

OrderByValue = null;

SkipValue = 0;

TakeValue = 0;

Comment AllEntities pourrait-il être à faux dans la méthode GetCategories alors que l'instruction qui suit le AllEntities = true est l'appel à GetCategories et que cette méthode commence avec un test sur AllEntities ?

En fait, il faut remarquer que cette méthode utilise la syntaxe yield return. Du coup, elle ne sera exécutée que lorsque la propriété Categories sera itérée. Cela signifie donc que l'appel aux différentes méthodes de LINQ se fera préalablement.

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 :

Publié mardi 28 avril 2009 22:38 par Matthieu MEZIL

Classé sous : , , , , ,

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Les actualités de la semaine sur c2i.fr (14 mai - 20 mai) par Richard Clark le il y a 5 heures et 12 minutes

- Reactive Extensions : Consommer des services avec Rx Partie 3, les pièges à éviter par Léonard Labat le il y a 14 heures et 17 minutes

- SharePoint Blog Site, problème d’archives par Le Blog (Vert) d'Arnaud JUND le 05-20-2012, 13:09

- Soirée ALT.NET Mai - 3 présentations par #Rui le 05-18-2012, 11:59

- [ #SharePoint 2010][ #SQLServer 2012] AlwaysOn pour SharePoint (2/4) : Configuration (2e partie)… par Le blog de Patrick [MVP SharePoint] le 05-18-2012, 11:31

- Team Foundation Server 11: tous les trésors cachés du site d’équipe par Philess le 05-16-2012, 19:01

- [PowerShell 3] Télécharger et installer la documentation en ligne par Blog de SPBrouillet (Pierrick BROUILLET) le 05-16-2012, 17:36

- [#SharePoint 2010][#SQLServer 2012] AlwaysOn pour SharePoint (1/4) : Configuration (1ère partie)… par Le blog de Patrick [MVP SharePoint] le 05-16-2012, 12:10

- Job Day @MIC Brussels - .Net Developers on Mobile applications par Le Blog (Vert) d'Arnaud JUND le 05-15-2012, 20:26

- [SharePoint 2010] – SharePoint 2010, Windows (Server) 8 et des erreurs IIS sont dans une VM… par Blog de SPBrouillet (Pierrick BROUILLET) le 05-14-2012, 12:10