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

Asp.net Core WebApi中EntityFramework如何实现distinct和not in查询

调整方案

你只需要先构造指定用户已拥有标签的子查询,再在过滤条件中排除这部分标签即可,修改后的代码如下:

// 定义要排除的用户ID,可替换为实际传入的变量,示例值为87
int excludeUserId = 87;

// 构造排除标签的子查询,EF会自动将其合并到最终SQL中,不会单独执行
var excludeTags = _context.UserTag
    .Where(t => t.UserId == excludeUserId && t.TagName != null)
    .Select(t => t.TagName);

var list = await _context.UserTag
    .AsNoTracking()
    // 新增排除逻辑:过滤掉目标用户已添加的标签
    .Where(userTag => userTag.TagName != null && !userTag.Disabled && !excludeTags.Contains(userTag.TagName))
    .Select(userTag => userTag.TagName)
    .OrderBy(tagName => tagName)
    .Distinct()
    .ToListAsync();

说明

  • 上述写法生成的SQL结构和你给出的预期语句完全一致,子查询会被EF自动翻译为NOT IN子句
  • 保留了你原有逻辑中的!userTag.Disabled过滤条件,如不需要可自行删除
  • 要排除的用户ID建议做成可传入参数,不要硬编码在查询逻辑中

内容的提问来源于stack exchange,提问作者Mukil Deepthi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:45:06