Подтвердить что ты не робот

Фильтрация по включению в EF Core

Я пытаюсь отфильтровать первоначальный запрос. Я вложил в него листочки с модели. Я пытаюсь фильтровать на основе свойства одного из включений. Например:

using (var context = new BloggingContext())
{
    var blogs = context.Blogs
        .Include(blog => blog.Posts)
            .ThenInclude(post => post.Author)
        .ToList();
}

Как я могу также сказать .Where(w => w.post.Author == "me")?

4b9b3361

Ответ 2

Вы также можете отменить поиск.

{
    var blogs = context.Author
    .Include(author => author.posts)
        .ThenInclude(posts => posts.blogs)
    .Where(author => author == "me")
    .Select(author => author.posts.blogs)
    .ToList();
}

Ответ 3

Не уверен насчет Include() AND ThenInclude(), но это легко сделать с помощью одного include:

var filteredArticles = 
    context.NewsArticles.Include(x => x.NewsArticleRevisions)
    .Where(article => article.NewsArticleRevisions
        .Any(revision => revision.Title.Contains(filter)));

Надеюсь это поможет!

Ответ 4

Хотя это (все еще обсуждается) невозможно с 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();

Ответ 5

Самое простое встроенное решение, которое я использовал, было бы что-то вроде:

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();
}