2011-02-06 8 views
1

すべて を含め、私が作る助けてください(含める)以下の場合に動作します:Entity Frameworkの&

ctx.Messages 
    .Include("Comments.CommentType") 
    .Include("Comments.Owner") 
    .Include("Comments.Message") 
    .Where(m => m.RID == messageId) 
    .SelectMany(m => m.Comments) 
    .Where(c => c.CommentType.Id == commentTypeId) 
    .ToList(); 

私はこのクエリを書き直す必要がありますどのように?

P.S.私はEF 3.5(4.0ではなく)を使用しています

+0

あなたの9つの質問のうち6つに答えた人はいませんか? –

+0

この場合、何が間違っているかを知る必要があります。なぜインクルードが動作しないのですか? –

+0

あなたは私たちに多くを与えているわけではありません...あなたはこれが何をしていると思いますか、それは何ですか、あなたのデータモデルはどのように見えますか... –

答えて

1

これは、インクルードとジョインを伴うissueに関連している可能性が高いです。インクルードはステートメントの最後にのみ適用され、結合により、クエリのタイプはIQueryable<Message>からIQueryable<Comment>に変更されます。

ジョインを削除すると、ナビゲーションプロパティが正しく含まれているはずです。以下を試してください:

ctx.Comments 
    .Include("CommentType") 
    .Include("Owner") 
    .Include("Message") 
    .Where(c => c.Message.RID == messageId && c => c.CommentType.Id == commentTypeId) 
    .ToList(); 
+0

Yannick、私はMSDNの記事を読んでいますが、私はまだ以下のクエリでinclude()が動作しない理由を理解できません:var messages = ctx.Messages.Include( "Account"); var previews = ctx.MessagePreviews; VARクエリ= m.IDALIAS上のプレビューのpに参加 メッセージにおけるMからはm.Id ==のmessageIdが新しいペア<メッセージ、MessagePreview> {まず= M、第= P}を選択 p.IDALIASに等しいです。 –

+0

私が理解する限り、それはインクルードが適用される方法と関係しています。どうやら、結合( 'SelectMany')によってクエリの結果の型が変わったとき、EFはインクルードを適用しません。 –