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

时间:2019-03-10 06:42:06

标签: c# entity-framework-core

我正在使用EF Core 2.2版。我有三个表:

  1. 用户:用户名,名字,姓氏
  2. Book :BookId,BookName
  3. UserBook :UserId,BookId <-联接表,用于User和Book之间的多对多关系

我想获取与特定UserId相关联的图书清单。

我尝试过:

var books = await _context.Books
                .Include(ub => ub.UserBooks.Where(f => f.UserId == id))
                .ToListAsync();

但是a,它不起作用。我收到错误消息:包含属性lambda表达式'ub => {来自ub.UserBooks中的UserBook,其中[[f] .UserId == __id_0)select [f]}'无效。

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

1 个答案:

答案 0 :(得分:2)

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

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

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