2016-12-12 18 views
0

EF Linqクエリでネストされたインクルードをどのようにフィルタリングしますか?Entity Frameworkの "Include()。Where()"方法

var blogs = context.Blogs 
.Include(blog => blog.Posts) 
    .ThenInclude(post => post.Author) 
    .ThenInclude(author => author.Photo) 
.ToList(); 

をしかし、私は名前だけ「マーク」で特定の日付以降の記事とブログ、または著者を取得したい:例えば、私が持っている場合。

私はいくつかの方法で、次の操作を実行できるようにしたいと思います:

var blogs = context.Blogs 
.Include(blog => blog.Posts).Where(... blog.Posts.Date>X....) 
    .ThenInclude(post => post.Author).Where(... post.Author.Name=='Mark' ...) 
    .ThenInclude(author => author.Photo) 
.ToList(); 

それとも、私がここには本当に簡単な何かが足りないのですか?事前にあなたのアドバイスをありがとう!

+1

'レイジーローディング 'が無効になっていますか?私はあなたが '.Include(blog => blog.Posts.Where(yourCondition))'のようなことをすることができると確信しています。 – Alex

+0

ありがとうアレックス - はいこれは重複しています。 –

答えて

-1

EFはあなたがいない追加の作業を

var blogs = context.Blogs 
.Include(blog => blog.Posts).Where(b => b.Posts.Date>X) 
    .Include(post => post.Author).Where(p => p.Author.Name=='Mark') 
    .Include(author => author.Photo) 
.ToList(); 

を要求しているどのようなことができますEFはToList()が効率的なクエリを構築する、と呼ばれているだけで、実際のクエリを作成します。

https://msdn.microsoft.com/en-us/library/bb738633(v=vs.110).aspx

+1

AuthorはPostのプロパティなので、ThenInclude()が必要なので、これはコンパイルされません。あなたの例では、コンパイラはAuthorがBlogのプロパティであると予想しています。 –

関連する問題