查询多对多返回null,具有两个二重多对多关系



我有一个项目列表,其中包含具有特定角色的用户或被允许查看该项目的用户可以查看的项目。我尝试根据用户的角色和Id查询项目列表,但结果为空。我在这里做错了什么?

var query = from menuItem in _db.MenuItems
where menuItem.MenuRoles.Any(m => m.RoleId == role.Id)
where menuItem.MenuUsers.Any(m => m.UserId == userId)
select menuItem;

您不需要双where子句,您需要or:

var query = from menuItem in _db.MenuItems
where menuItem.MenuRoles.Any(m => m.RoleId == role.Id) || menuItem.MenuUsers.Any(m => m.UserId == userId)
select menuItem;

如果第一个where没有找到任何内容,那么第二个where子句在结果中也找不到任何内容。编辑:我刚刚看到上面写着他们的角色和身份。如果是,则将||替换为&&

您可以尝试此查询

var query = from menuItem in _db.MenuItems
where menuItem.MenuRoles.RoleId == role.Id && menuItem.MenuUsers.UserId == userId
select menuItem;

最新更新