通过 EF Core 中的联接表过滤结果列表

use*_*789 4 c# entity-framework-core

我使用的是 EF Core 2.2 版本。我有三张桌子:

  1. 用户:用户 ID、名字、姓氏
  2. 图书:图书编号、图书名称
  3. UserBook : UserId, BookId <--User和Book多对多关系的联表

我想获取与特定用户 ID 关联的书籍列表。

我试过了:

var books = await _context.Books
                .Include(ub => ub.UserBooks.Where(f => f.UserId == id))
                .ToListAsync();
Run Code Online (Sandbox Code Playgroud)

但可惜的是,这不起作用。我收到错误: Include 属性 lambda 表达式 'ub => {from UserBook in ub.UserBooks where ([f].UserId == __id_0) select [f]}' 无效。

如何获取与特定 UserId 关联的图书列表?谢谢

Stu*_*tLC 6

您需要将 where 过滤器从Include- include 用于急切加载,而不是过滤

查找与给定用户关联的所有书籍的查询:

var books = await _context.Books
            .Include(b => b.UserBooks)
            .Where(b => b.UserBooks.Any(ub => ub.UserId == id))
            .ToListAsync();
Run Code Online (Sandbox Code Playgroud)