C# 按条件筛选列表作为元素中的嵌套元素
我想返回一个筛选其特定角色的用户列表。一个用户可以有多个角色,但用户列表始终排除其中一个角色为“主要”的用户。我在C# 按条件筛选列表作为元素中的嵌套元素,c#,linq,entity-framework-core,C#,Linq,Entity Framework Core,我想返回一个筛选其特定角色的用户列表。一个用户可以有多个角色,但用户列表始终排除其中一个角色为“主要”的用户。我在where() IList<Account> users = _context.Account.AsNoTracking() .Include(a => a.Profile) .Include(a => a.AccountRole) .ThenInclude(r => r.Role) .Where(a => (a
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();
IList用户=_context.Account.AsNoTracking()
.包括(a=>a.Profile)
.Include(a=>a.AccountRole)
.然后包括(r=>r.Role)
其中(a=>(a.组织==“我的公司”)&
(a.AccountRole.Any(r=>r.Role.Name!=“PRIMARY”))
.ToList();
这样写的意思是
至少有一个角色不是“主要”的所有用户
你想要的是:
!a.AccountRole.Any(r => r.Role.Name == "PRIMARY")
没有任何角色的所有用户都是“主”
这样写的意思是
至少有一个角色不是“主要”的所有用户
你想要的是:
!a.AccountRole.Any(r => r.Role.Name == "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();
IList用户=_context.Account.AsNoTracking()
.包括(a=>a.Profile)
.Include(a=>a.AccountRole)
.然后包括(r=>r.Role)
.Where(a=>!a.AccountRole.Any(r=>r.Role.Name==“PRIMARY”)//不能包含主角色
&&a.组织机构==“我的公司”)
.ToList();
排除其中一个角色为“主要”的用户
因此,遵循逻辑:它必须是
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();
IList用户=_context.Account.AsNoTracking()
.包括(a=>a.Profile)
.Include(a=>a.AccountRole)
.然后包括(r=>r.Role)
.Where(a=>!a.AccountRole.Any(r=>r.Role.Name==“PRIMARY”)//不能包含主角色
&&a.组织机构==“我的公司”)
.ToList();
我认为问题在于第二个条件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();
IList用户=_context.Account.AsNoTracking()
.包括(a=>a.Profile)
.Include(a=>a.AccountRole)
.然后包括(r=>r.Role)
其中(a=>(a.组织==“我的公司”)&
(!a.AccountRole.Any(r=>r.Role.Name==“PRIMARY”))
.ToList();
这可能会起作用,因为第二个条件只有在AccountRole中没有“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();
IList用户=_context.Account.AsNoTracking()
.包括(a=>a.Profile)
.Include(a=>a.AccountRole)
.然后包括(r=>r.Role)
其中(a=>(a.组织==“我的公司”)&
(!a.AccountRole.Any(r=>r.Role.Name==“PRIMARY”))
.ToList();
这可能会起作用,因为第二个条件只有在AccountRole中没有“主要”角色时才起作用。您应该将a.AccountRole.Any(r=>r.role.Name!=“主要”)
编辑为!a、 AccountRole.Any(r=>r.Role.Name!=“PRIMARY”)
您应该将a.AccountRole.Any(r=>r.Role.Name!=“PRIMARY”)
编辑为!a、 AccountRole.Any(r=>r.Role.Name!=“主”)
!a、 AccountRole.Any(r=>r.Role.Name==“PRIMARY”)
与a.AccountRole.Any(r=>r.Role.Name!=“PRIMARY”)
非常不同。非常感谢你<代码>!a、 AccountRole.Any(r=>r.Role.Name==“PRIMARY”)
与a.AccountRole.Any(r=>r.Role.Name!=“PRIMARY”)
非常不同。非常感谢你!!!很好的解释。1+很好的解释。1+@Hoánguyễn为voting@Ho阿恩古伊ễn Cam on for Voting在您发布第四版相同答案之前,此问题已回答三次。而且,你把它弄错了,因为你保留了=代码>在您发布同一答案的第四个版本之前,此问题已经回答了三次。而且,你把它弄错了,因为你保留了=代码>