Ответ 1
Не выполнимо
Продолжается обсуждение этой темы: https://github.com/aspnet/EntityFramework/issues/1833.
Я бы посоветовал поискать любую из сторонних библиотек, перечисленных там, например: https://github.com/jbogard/EntityFramework.Filters
Я пытаюсь отфильтровать первоначальный запрос. Я вложил в него листочки с модели. Я пытаюсь фильтровать на основе свойства одного из включений. Например:
using (var context = new BloggingContext())
{
var blogs = context.Blogs
.Include(blog => blog.Posts)
.ThenInclude(post => post.Author)
.ToList();
}
Как я могу также сказать .Where(w => w.post.Author == "me")
?
Не выполнимо
Продолжается обсуждение этой темы: https://github.com/aspnet/EntityFramework/issues/1833.
Я бы посоветовал поискать любую из сторонних библиотек, перечисленных там, например: https://github.com/jbogard/EntityFramework.Filters
Вы также можете отменить поиск.
{
var blogs = context.Author
.Include(author => author.posts)
.ThenInclude(posts => posts.blogs)
.Where(author => author == "me")
.Select(author => author.posts.blogs)
.ToList();
}
Не уверен насчет Include() AND ThenInclude(), но это легко сделать с помощью одного include:
var filteredArticles =
context.NewsArticles.Include(x => x.NewsArticleRevisions)
.Where(article => article.NewsArticleRevisions
.Any(revision => revision.Title.Contains(filter)));
Надеюсь это поможет!
Хотя это (все еще обсуждается) невозможно с EF Core, мне удалось сделать это с помощью Linq to Entities поверх EF Core DbSet. В вашем случае вместо:
var blogs = context.Blogs
.Include(blog => blog.Posts)
.ThenInclude(post => post.Author)
.ToList()
.. у вас будет:
await (from blog in this.DbContext.Blogs
from bPost in blog.Posts
from bpAuthor in bPost.Author
where bpAuthor = "me"
select blog)
.ToListAsync();
Самое простое встроенное решение, которое я использовал, было бы что-то вроде:
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();
}