2009-08-14 5 views
4

Je suis en train de me familiariser avec asp.net mvc et je me demande comment on pourrait aller pour obtenir des données relationnelles à plus d'un niveau de profondeur de l'entité spécifiée dans le de clause. Utilisation du modèle de domaine suivant à titre d'exemple:LINQ Requête pour récupérer plusieurs niveaux de données relationnelles

Un blog contient de nombreux articles. Les messages ont beaucoup de commentaires.

Comment écrire une requête LINQ pour renvoyer des entités au niveau Blog.Posts.Comments?

La seule solution (pas si élégante) que j'ai trouvée était d'utiliser une requête LINQ pour obtenir Blog et Posts, puis un foreach pour obtenir des commentaires.

var blog = (from b in _db.BlogSet.Include("Posts") 
      select b); 

foreach (Post p in blog.Posts) 
{ 
    var comments = (from c in _db.CommentSet 
        where c.PostId = p.Id 
        select c); 

    p.Comments = comments; 

} 

Répondre

6

Un blog a de nombreux postes. Les messages ont beaucoup de commentaires. Comment écrire une requête LINQ pour renvoyer des entités au niveau Blog.Posts.Comments?

je crois, vous pouvez faire ce qui suit pour y parvenir:

var blog = (from b in _db.BlogSet.Include("Posts.Comments") 
      select b); 

Dans ce cas, pour chaque blog, les messages et leurs commentaires seront rapatriées.

Marc

+0

Cela a fonctionné parfaitement et garde le code gentil et propre –

+1

Si je pouvais voter ceci plus je le ferais! Cela fonctionne pour 4 niveaux pour moi: o) –

5

Vous pouvez simplement utiliser deux des états:

var comments=from post in blog 
      from comment in blog.comments 
      where comment.PostId==post.Id 
      select comment; 
+0

C'est bon à savoir. Il sera utile lorsque vous devez inclure plusieurs entités imbriquées. Merci! –

Questions connexes