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

如何用LinQ实现从输入ID列表返回数据库中不存在的ID(异步方法)

找出输入ID列表中不存在于数据库的ID

你的代码逻辑搞反了——当前代码是从数据库表中筛选出ID不在输入列表里的所有记录ID,这和你要的“找出输入列表里不在数据库表中的ID”完全是两个结果。

正确实现方式

最稳妥的写法是先从数据库查询出输入列表中已存在的ID,再用输入列表减去这些存在的ID:

public async Task<List<int>> NotExisting(List<int> inputIds, CancellationToken cancellationToken)
{
    // 查询数据库中与输入列表重叠的ID
    var existingIds = await _dbContext.Table
        .Where(x => inputIds.Contains(x.Id))
        .Select(x => x.Id)
        .ToListAsync(cancellationToken);
    
    // 从输入列表中排除已存在的ID,得到目标结果
    return inputIds.Except(existingIds).ToList();
}

逻辑说明

  1. 第一步从数据库捞取所有在inputIds里的ID,这一步会生成SQL的WHERE Id IN (...)语句,高效筛选出重叠数据;
  2. 用Linq的Except方法,从输入列表中移除所有已存在的ID,剩下的就是输入列表里不在数据库中的ID。

原代码问题解析

原代码的Where(x => !inputIds.Contains(x.Id))是遍历数据库表的每一条记录,判断这条记录的ID不在输入列表里就保留,最终返回的是数据库中所有不属于输入列表的ID,完全偏离了你的需求方向。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:10:28