代码之家  ›  专栏  ›  技术社区  ›  Hoàng Nguyễn

按条件筛选列表作为元素内的嵌套元素

  •  0
  • Hoàng Nguyễn  · 技术社区  · 7 年前

    我想返回一个筛选特定角色的用户列表。一个用户可以有多个角色,但用户列表始终排除具有“主要”角色之一的用户。我有两个条件 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();
    
    4 回复  |  直到 7 年前
        1
  •  3
  •   Rafalon    7 年前
    a.AccountRole.Any(r => r.Role.Name != "PRIMARY")
    

    这样写的意思是

    至少有一个角色不是“主要”的所有用户

    你想要的是:

    !a.AccountRole.Any(r => r.Role.Name == "PRIMARY")
    

    所有不具有“主要”角色的用户

        2
  •  1
  •   Antoine V    7 年前

    排除具有“主要”角色之一的用户

    所以,按照逻辑:一定是。

    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();
    
        3
  •  1
  •   Snippy Valson    7 年前

    我认为问题在于第二个条件,即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中没有“主要”角色时,第二个条件才会起作用。

        4
  •  0
  •   Feras Al Sous WSchnuble    7 年前

    您应该编辑 a.AccountRole.Any(r => r.Role.Name != "PRIMARY") !a.AccountRole.Any(r => r.Role.Name != "PRIMARY") .