我想返回过滤其特定角色的用户列表。一个用户可以具有多个角色,但是用户列表始终排除具有“ PRIMARY”角色之一的用户。我在where()
方法中包括了两个条件,但是列表仅过滤第一个条件。
IList<Account> users = _context.Account.AsNoTracking()
.Include(a => a.Profile)
.Include(a => a.AccountRole)
.ThenInclude(r => r.Role)
.Where(a => (a.Organization == "My Company") &&
(a.AccountRole.Any(r => r.Role.Name != "PRIMARY")))
.ToList();
答案 0 :(得分:3)
a.AccountRole.Any(r => r.Role.Name != "PRIMARY")
这样写,表示
具有至少一个不是“ PRIMARY”角色的所有用户
您想要的是:
!a.AccountRole.Any(r => r.Role.Name == "PRIMARY")
所有没有任何角色的用户都是“ PRIMARY”
答案 1 :(得分:1)
排除具有“ PRIMARY”角色的用户
因此,遵循逻辑:必须如此。
IList<Account> users = _context.Account.AsNoTracking()
.Include(a => a.Profile)
.Include(a => a.AccountRole)
.ThenInclude(r => r.Role)
.Where(a => !a.AccountRole.Any(r => r.Role.Name == "PRIMARY") // can't contain a role PRIMARY
&& a.Organization == "My Company")
.ToList();
答案 2 :(得分:1)
我认为问题出在第二个条件where子句。您可以尝试将其更改为:
IList<Account> users = _context.Account.AsNoTracking()
.Include(a => a.Profile)
.Include(a => a.AccountRole)
.ThenInclude(r => r.Role)
.Where(a => (a.Organization == "My Company") &&
(! a.AccountRole.Any(r => r.Role.Name == "PRIMARY")))
.ToList();
这可能起作用,因为第二个条件仅在AccountRole中没有“ PRIMARY”角色时才起作用。
答案 3 :(得分:0)
您应将a.AccountRole.Any(r => r.Role.Name != "PRIMARY")
修改为!a.AccountRole.Any(r => r.Role.Name != "PRIMARY")
。