J'essaie de filtrer sur la requête initiale. J'ai imbriqué inclure feuilles d'un modèle. J'essaie de filtrer en fonction d'une propriété sur l'un des includes. Par exemple:
using (var context = new BloggingContext())
{
var blogs = context.Blogs
.Include(blog => blog.Posts)
.ThenInclude(post => post.Author)
.ToList();
}
Comment puis-je aussi dire .Where(w => w.post.Author == "me")
?
Pas faisable.
Une discussion est en cours sur ce sujet: https://github.com/aspnet/EntityFramework/issues/1833
Je suggèrerais de chercher dans les bibliothèques tierces énumérées ici, par exemple: https://github.com/jbogard/EntityFramework.Filters
Vous pouvez également inverser la recherche.
{
var blogs = context.Author
.Include(author => author.posts)
.ThenInclude(posts => posts.blogs)
.Where(author => author == "me")
.Select(author => author.posts.blogs)
.ToList();
}
Pas sûr de Include () AND ThenInclude (), mais il est simple de le faire avec un seul include:
var filteredArticles =
context.NewsArticles.Include(x => x.NewsArticleRevisions)
.Where(article => article.NewsArticleRevisions
.Any(revision => revision.Title.Contains(filter)));
J'espère que cela t'aides!
Bien que ce ne soit (encore en discussion) pas réalisable avec EF Core, j'ai réussi à le faire en utilisant Linq to Entities sur EF Core DbSet. Dans votre cas au lieu de:
var blogs = context.Blogs
.Include(blog => blog.Posts)
.ThenInclude(post => post.Author)
.ToList()
.. tu auras:
await (from blog in this.DbContext.Blogs
from bPost in blog.Posts
from bpAuthor in bPost.Author
where bpAuthor = "me"
select blog)
.ToListAsync();
La solution en ligne la plus simple que j'ai utilisée serait quelque chose comme:
using (var context = new BloggingContext())
{
var blogs = context.Blogs
.Include(blog => blog.Posts)
.ThenInclude(post => post.Author)
.FromSql("Select b.* from Blogs b inner join Posts p on b.BlogId = p.BlogId where p.Author = 'me'")
.ToList();
}