に私は、しかし、私は私の問題に答えを適用する方法を動作するように見えることはできません、同様の質問にいくつか答えを見てきました。条件は、(インクルード)Entity Frameworkの
var allposts = _context.Posts
.Include(p => p.Comments)
.Include(aa => aa.Attachments)
.Include(a => a.PostAuthor)
.Where(t => t.PostAuthor.Id == postAuthorId).ToList();
アタッチメントは、作成者(タイプ著者)またはコントリビュータ(タイプコントリビュータ)によってアップロードできます。私がしたいのは、添付ファイルの所有者がAuthorタイプの添付ファイルのみです。
私は、これは動作しません知っているとエラーを与える:
.Include(s=>aa.Attachments.Where(o=>o.Owner is Author))
私はここにフィルタリングされた投影について読んだ
EDIT - 記事へのリンク: :http://blogs.msdn.com/b/alexj/archive/2009/10/13/tip-37-how-to-do-a-conditional-include.aspx、
が、私はちょうどそれの周りに私の頭を得ることができません。
私はすべての投稿をしたいが、私は著者に属し、それらの記事のために、添付ファイルを取得すると、最終的なwhere句でフィルタを含める必要はありません。
EDIT 2: - プロパティにポストスキーマはInclude()
に
public abstract class Post : IPostable
{
[Key]
public int Id { get; set; }
[Required]
public DateTime PublishDate { get; set; }
[Required]
public String Title { get; set; }
[Required]
public String Description { get; set; }
public Person PostAuthor { get; set; }
public virtual ICollection<Attachment> Attachments { get; set; }
public List<Comment> Comments { get; set; }
}
私たちに 'Posts'スキーマを教えてもらえますか? – DarkKnight
@DarkKnight - 編集を参照してください – grayson
@graysonあなたがしたいことはできません。 'Linq2Sql'はあなたのコードを生の' SQL'に変換し、結合を介して子の行を返します。このような条件付き結合を 'SQL'で行うことはできません。あなたの唯一のオプションは、 '.Include(aa => aa.Attachments)'を削除し、所有者が著者/寄稿者であるかどうかによって添付ファイルを返す2番目のクエリです。 – Rob