如何用Entity Framework筛选所有关联ClientId均在有效列表的UserId
筛选所有关联ClientId均在有效列表中的UserId(Entity Framework实现)
针对你的需求,这里提供两种适用于.NET Framework 4.6(对应EF6版本)的查询写法,都能实现你要的效果:
方法一:分组后筛选无无效关联的用户
直接按UserId分组,过滤掉分组内存在不在validClientIds中ClientId的用户:
// 替换为你的实际DbContext和实体类名,示例中关联表实体为UserClient var validClientIds = new List<int> { 1, 2 }; var validUserIds = dbContext.UserClients .GroupBy(uc => uc.UserId) .Where(group => !group.Any(uc => !validClientIds.Contains(uc.ClientId))) .Select(group => group.Key) .ToList();
方法二:排除法(先找无效用户再排除)
先找出所有关联过无效ClientId的用户ID,再从全部用户ID中排除这些值:
var validClientIds = new List<int> { 1, 2 }; // 第一步:获取所有关联过无效ClientId的UserId var invalidUserIds = dbContext.UserClients .Where(uc => !validClientIds.Contains(uc.ClientId)) .Select(uc => uc.UserId) .Distinct() .ToList(); // 第二步:从所有UserId中排除无效用户 var validUserIds = dbContext.UserClients .Select(uc => uc.UserId) .Distinct() .Where(userId => !invalidUserIds.Contains(userId)) .ToList();
效果验证
针对你给出的示例数据:
- UserId 1关联了ClientId 3(不在有效列表),会被两种方法排除
- UserId 2、3的所有关联ClientId都在有效列表中,会被保留
内容的提问来源于stack exchange,提问作者Tyler Kalosza
相关产品推荐
相关产品推荐

