.net 使用LinQ从列表中返回不存在于另一个列表中的值

yrdbyhpb  于 2022-11-26  发布在  .NET
关注(0)|答案(1)|浏览(178)

嘿,我有一个id的整数列表。我想创建一个异步方法,返回一个没有出现在dbContext表中的id列表。我有这样的东西。

public async Task<List<int>> NotExisting(List<int> inputIds, CancellationToken cancellationtoken)
{
var notExisting = await _dbContext.Table
    .Where(x => !inputIds.Contains(x.Id)).Select(x => x.Id).ToListAsync();

return notExisting;
}

现在它只是取表中与输入id不匹配的所有元素。我只想从inputIds中获取_dbContext.Table中不存在的元素。我知道我在Select中取错了东西,但我不知道如何访问inputIds中的当前id。

f45qwnt8

f45qwnt81#

您只需要切换SELECT源,因为您想要的ID最终不是来自数据库:

var allIDsInDb = (await _dbContext.Table.Select(x => x.Id).ToListAsync()).ToHashSet();
// ToHashSet() was for faster lookups in the next line
var notExisting = inputIds.Except(allIDsInDb).ToList();

UPD:如果您不想从数据库中提取所有ID,您仍然需要找出列表中哪些ID存在于数据库中,因此只需添加一个条件:

var allIDsInDb = (await _dbContext.Table.Where(x => inputIds.Contains(x.Id)).Select(x => x.Id).ToListAsync()).ToHashSet();
// ToHashSet() was for faster lookups in the next line
var notExisting = inputIds.Except(allIDsInDb).ToList();

相关问题