@PerseforeComplete

Как получить отфильтрованные данные из таблицы many-to-many?

Вот максимально упрощённый пример. Есть 3 модели
public class Book
{
    public int Id { get; set; }
    [Required]
    public string Title { get; set; }
    public List<AuthorBook> AuthorsBooks { get; set; } = new List<AuthorBook>();
}

public class Author
{
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    public List<AuthorBook> AuthorsBooks { get; set; } = new List<AuthorBook>();
}

public class AuthorBook
{
    public int AuthorId { get; set; }
    public Author Author { get; set; }
    public int BookId { get; set; }
    public Book Book { get; set; }
}

Задача - получить все книги конкретного автора по authorId. Я писал что-то вроде такого
public IEnumerable<Book> GetBooksByAuthor(int authorId)
    => context.Books
        .Include(book => book.AuthorsBooks
            .Where(authorBook => authorBook.AuthorId == authorId))
        .ThenInclude(authorBook => authorBook.Person)
        .Where(book => book.AuthorsBooks.Count > 0);

context - это класс, унаследованный от DbContext.
Данный код выводит вообще все книги, фильтрация не работает. В чём ошибка и как это сделать?
  • Вопрос задан
  • 57 просмотров
Пригласить эксперта
Ответы на вопрос 1
sarapinit
@sarapinit Куратор тега C#
Точу водой камень
var query = from b in context.Books
    join au in context.AuthorBooks on b.Id equals au.BookId
    join a in context.Authors on au.AuthorId equals a.Id
    where a.Id == authorId
    select b;

var books = query.ToArray();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы