Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Entity Framework et LINQ : une petite différence, mais une grosse conséquence

Prenons ces 2 requètes:

using (var entities = new NorthwindEntities())

          {

              var q = (from cust in entities.Customers.Include("Orders")

                       where cust.CustomerID == "VINET"

                       select cust).ToArray();

 

          }


using (var entities = new NorthwindEntities())

{

    var q = (from Customers cust in entities.Customers.Include("Orders")

            where cust.CustomerID == "VINET"

            select cust).ToArray();

 

}

La différence c’est que la première fait ce qu’on attend d’elle: elle charge la liste des Orders pour chaque Customer, et l’autre non, elle ne charge que les Customers. Je ne vois pourquoi forcer le type dans le “from” fait changer le comportement de la requète.

A creuser...

Publié jeudi 22 janvier 2009 23:19 par Miiitch
Classé sous : ,
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

# re: Entity Framework et LINQ : une petite différence, mais une grosse conséquence

Parce que la syntaxe from Type name in est compilée en appel à la méthode d'extension Cast

<T>. Donc j'imagine que le provider utilise Cast<T> pour restreindre le type.

jeudi 22 janvier 2009 23:39 by Jb Evain

# re: Entity Framework et LINQ : une petite différence, mais une grosse conséquence

LOL: ce qu'il y a de marrant c'est que pour moi, je m'attendais à l'inverse (ie j'attendais bien des customers).

Encore une fois, Linq c'est bien, mais faut vraiment bien comprendre comment ca marche et ce que ca fait. Maitriser la bête revient à conduire une Ferrarri dans les traboules de Lyon avec de la vaiselle dans le coffre (y'a un  coffre dans une f40 ?).

Perso, j'ai toujours pas compris et je l'utilise avec une extreme parsimonie.

vendredi 23 janvier 2009 07:48 by richardc

# re: Entity Framework et LINQ : une petite différence, mais une grosse conséquence

Dès que j'ai LA réponse, moi ou Matthieu on postera ça. Mais quoique soit la raison, il y a des moments où la technologie doit être intuitive, et là manifestement, mon intuition me dit qu'il ne devrait pas y avoir de différence à l'exécution.

vendredi 23 janvier 2009 14:07 by Miiitch

# re: Entity Framework et LINQ : une petite différence, mais une grosse conséquence

JB Evain donne l'explication.

Quand tu spécifies le type, le compilateur C# rajoute un Cast sur la source de donnée.

var q = entities.Customers.Include("Orders").Where( ...

var q2 = entities.Customers.Cast

<Customer>().Include("Orders").Where( ...

Si tu regardes l'arbre d'expression (q.Expression) tu verras une différence : l'ajout de la méthode Call.

Tu peux le voir facilement via le visualizer "Expression Tree Visualizer".

J'imagine que le provider Linq To Entity ne gére pas correctement ce noeud. Il faudrait regarder en détail les sources du Provider pour comprendre comment il gère ce noeud.

Personnellement, je n'aime pas du tout les nouveaux mots clés "Linq", l'appel des méthodes d'expression avec les lambda expression et beaucoup plus explicite et compréhensible ! On laisse beaucoup moins de liberté au compilo C#.

vendredi 23 janvier 2009 21:03 by cyril

# re: Entity Framework et LINQ : une petite différence, mais une grosse conséquence

Un article sympa aussi sur ce sujet .. les vices de l'include :/

http://wildermuth.com/2008/12/28/Caution_when_Eager_Loading_in_the_Entity_Framework

lundi 26 janvier 2009 10:35 by davidrei
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- TechDays Paris 2012 : Session pleinière jour 3 par Blog Technique de Romelard Fabrice le il y a 21 heures et 15 minutes

- Mishra Reader : un lecteur RSS très Zune Style en Open Source ! par Cyril Sansus le il y a 23 heures et 48 minutes

- [framework 4] Les Tasks et le Thread UI par Fathi Bellahcene le 02-09-2012, 00:33

- Workflow Foundation 3 a un pied dans la tombe par Blog de Jérémy Jeanson le 02-08-2012, 22:15

- TechDays Paris 2012 : Nouvelles tendances du poste de travail - Bring Your own PC par Blog Technique de Romelard Fabrice le 02-08-2012, 19:42

- TechDays Paris 2012 : System Center Service Manager 2012 Vue d’ensemble par Blog Technique de Romelard Fabrice le 02-08-2012, 17:32

- TechDays Paris 2012 : Pleinière second jour par Blog Technique de Romelard Fabrice le 02-08-2012, 16:23

- TechDays Paris 2012 : Retour d'expérience sur la mise en place d'un Cloud Privé par Blog Technique de Romelard Fabrice le 02-08-2012, 16:04

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le 02-07-2012, 23:59

- Perspective 3.0 pour Silverlight 5.0 par Perspective le 02-07-2012, 22:39