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

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01