2009-08-14 12 views
4

私はasp.net mvcでスピードアップしていますが、私はどのようにリレーショナルデータをfrom句。以下のドメインモデルを例に使用してください:LINQ複数レベルのリレーショナルデータを取得するためのクエリ

ブログには多くの投稿があります。投稿には多くのコメントがあります。

エンティティをBlog.Posts.Commentsレベルに戻すLINQクエリを作成するにはどうすればよいですか?

私が思いついた唯一の(あまりエレガントでない)解決策は、LINQクエリを使用してブログと投稿を取得し、次にforeachがコメントを取得することでした。

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; 

} 

答えて

6

ブログには多くの記事があります。投稿には多くのコメントがあります。 エンティティをBlog.Posts.Commentsレベルまで戻すLINQクエリを作成するにはどうすればよいですか?

私はあなたがこれを達成するために次の操作を行うことができ、信じる:

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

、各ブログのために、投稿や彼らのコメントがフェッチされます。

マーク

+0

これは完璧に機能し、コードを素敵で清潔に保ちます –

+1

私がこれ以上投票することができたら、私はそれを望みます!それは私のために4つのレベルのために働く:o) –

5

あなただけの文から2を使用することができます。

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

これはお勧めします。複数のネストされたエンティティを含める必要がある場合に便利です。ありがとう! –

関連する問題