Asp.Net .NET5 中使用EF 5 LINQ Lambda查询特定角色的用户数量
解决方案
你只需要补充一个Any条件筛选拥有Basic角色的用户即可,完整代码如下:
public int GetNumberOfActiveBasicUsers() { var users = _context.Users .Where(u => u.IsEnabled == true) .Where(u => u.UserName != "AdminUser") // 新增筛选逻辑:判断用户关联的角色中存在名称为Basic的角色 .Where(u => u.UserRoles.Any(ur => ur.Role.Name == "Basic")) .Count(); return users; }
补充说明
- 你原来写的
Include和ThenInclude可以直接删掉,对于这种聚合查询场景,EF 会自动生成多表关联的SQL语句,不需要显式加载导航属性,删掉后执行效率更高。 - 如果你想进一步优化查询性能,避免字符串匹配的开销,也可以先查Basic角色的Id再做筛选:
public int GetNumberOfActiveBasicUsers() { // 先获取Basic角色的Id var basicRoleId = _context.Roles.First(r => r.Name == "Basic").Id; var users = _context.Users .Where(u => u.IsEnabled == true) .Where(u => u.UserName != "AdminUser") .Where(u => u.UserRoles.Any(ur => ur.RoleId == basicRoleId)) .Count(); return users; }
两种写法都能匹配你的示例数据,返回预期结果2。
内容的提问来源于stack exchange,提问作者GolfBravo
相关产品推荐
相关产品推荐

