2009-11-02 7 views
3

Je ne sais pas si cela a déjà été répondu, j'ai regardé quelques questions mais je ne pense pas qu'ils étaient tout à fait ce que je recherchais.Entity Framework - Inclure dans la sous-requête?

Disons que je 3 tables:

Restaurant 1.....M MenuCategory 1.....M MenuItem 

J'ai une requête L2E qui ressemble à ceci:

Restaurant = context.Restaurant 
    .Include(r => r.MenuCategory) 
    .FirstOrDefault(r => r.RestaurantId == resaurantId); 

Ce qui fonctionne dans une certaine mesure, mais il ne préchargements de menu catégories Comme un travail autour de moi, je suis capable d'itérer autour de chaque catégorie et d'appeler. Load() sur eux, mais cela impliquera de frapper beaucoup plus que ce dont je devrais théoriquement avoir besoin.

Ce que je veux vraiment être en mesure de faire quelque chose comme:

Restaurant = context.Restaurant 
    .Include(r => r.MenuCategory) 
    .Include(r => r.MenuCategory.MenuItems) 
    .FirstOrDefault(r => r.RestaurantId == resaurantId); 

Mais clairement ce n'est pas disponible r.MenuCategory est un dénombrable

Réponse 1:

contexte .Restaurant.Include ("MenuCategory.MenuItems");

  • Cela fonctionne, mais il n'est pas fortement typé. Je me demande si quelqu'un est capable de trouver une deuxième réponse qui est fortement typée (je peux déplacer cette question à une autre question car elle a été répondue, et a bien répondu.)

J'ai déplacé cela à une autre question a estimé qu'il était injuste de loin d'une réponse qui est parfait et fonctionne exactement comme il se doit:

Entity Framework - Include in sub query? - Part 2

Répondre

2

This link here semble résoudre votre problème

var result = context.Restaurant.Include("MenuCategory.MenuItems"); 
+0

Bien fait - cela a réglé le problème pour moi .... mais, je n'aime vraiment pas cette approche non typée, c'est pourquoi j'ai utilisé une méthode d'extension. Je vais mettre la méthode d'extension dans la question - juste se demander si quelqu'un est en mesure de trouver une solution typée – Paul

+0

J'ai mis en place une partie 2 à cette question ici, http://stackoverflow.com/questions/1663783/entity-framework -include-in-sub-query-part-2, si vous êtes intéressé – Paul

7

Vous pouvez toujours utiliser la version Strongly typed pour le faire. Il suffit d'utiliser:

Restaurant = context.Restaurant 
    .Include(r => r.MenuCategory.Select(m => m.MenuItems)) 
    .FirstOrDefault(r => r.RestaurantId == resaurantId);