You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 16:46:37