2010-09-23 6 views
8

Je viens d'avoir un énorme *blonde moment**, mais il est mis en évidence un désagrément que j'ai avec Entity Framework. J'ai désactivé le chargement paresseux, donc je me force à réfléchir aux données dont j'ai besoin pour garder l'application aussi vite que possible.Entity Framework - Naviguer et inclure des propriétés à travers des collections

Ainsi, afin de renvoyer les données dans une requête, je dois utiliser la méthode Include:

var query = from item in context.Customers 
       .Include(x=> x.Orders) 
      select item 

Ceci est bien jusqu'à ce que je veux sélectionner un élément un peu plus profondément dans la hiérarchie. À savoir:

Customer 1-* Orders *-1 Factory 1-1 Factory Type 

Pour autant que je sache, la seule façon de retourner toutes ces données avec impatience serait de faire ce qui suit:

Avec
var query = from item in context.Customers 
       .Include("Orders.Factory.FactoryType") 
      select item 

ce qui précède, je suis incapable de utiliser le System.Data.Entity Lambdas selon mon premier exemple. Est-ce que quelqu'un sait s'il me manque quelque chose d'évident ici, ou est-ce que je suis bloqué avec l'utilisation de déclarations de chaînes pour mes propriétés de navigation à travers les collections?

Si je n'ai pas collections, je pourrais écrire:

.Include(x=> x.Order.OrderType.Factory.FactoryType) // No bother 

Mais à cause de la collection Orders, il n'y a aucun moyen de parcourir une propriété enfant pour autant que je peux dire (FirstOrDefault , SingleOrDefault, etc, ne fonctionnent pas).


** il est juste un tour-de-phrase, je trouve être très friands de blondes *

Répondre

14

Pour y compris EntityCollections vous utilisez la Sélectionner la méthode:

var query = from item in context.Customers 
      .Include(c => c.Orders.Select(o => o.Factory.FactoryType)) 
      select item 

S'il vous plaît noter que ce n'est pas une surcharge de la norme ObjectQuery<T>.Include Method et est simplement une méthode d'extension sur ObjectQuery<T> Classe venant avec EF CTP4.

Questions connexes