使用EF Core 2.1从输入列表中获取数据库中不存在的项目。

问题描述 投票:0回答:1

我想从数据库表中不存在的输入列表中获取项目。

我通过一个列表 IDs那么我想把这些 IDs 在我的表中不存在的。

这是我目前的情况。

var input = new List<string>() // list of Ids, for example count of 10

var itemsThatExistInDb = await DbContext.Set<Data>() // in table exist 100k+ records,
        .AsQueryable()                               // can't use simple !Contains()
        .Where(x => input.Contains(x.Id))
        .Select(x => x.Id)
        .ToListAsync();

var itemsThatNotExistInDb = input.Except(itemsThatExistInDb).ToList();

如何在EF Core 2. 1中写一个查询 从我的输入列表中获取项目 不存在于我的数据库中 而不使用linq扩展,如 Except()? 如果可以的话,我想把这些... Ids 直接从我的数据库查询到 DbContext

c# linq entity-framework-core
1个回答
0
投票

如果你不想使用 !contain 你可以使用下面的逻辑方法。

datatTable是你的表的内容。

List<string> fullList = new List<string>() { "3", "1", "2" }; //or any dynamic list content or class list based on requirement.
List<string> itemsThatNotExistInDb = new List<string>(); //New container list same as fullList
            foreach (var item in fullList)
            {
                var isRemoved = dataTable.RemoveAll(a => a.Id == item) == 1 ? true : false;
                if (isRemoved)
                {
                    itemsThatNotExistInDb.Add(item);
                }
            }

0
投票

我想你可以这样查询。

var input = new List<string>() // list of Ids

       List<string> itemsThatExist = new List<string>();

       var itemsThatNotExist  = await DbContext.Set<Data>()
                .AsQueryable()
                .ToDictionaryAsync(_ => _.ID, _ => _);

        foreach (var item in input)
        {
            if(AllItems.ContainsKey(item)){
                itemsThatExist.Add(item);
                itemsThatNotExist.Remove(item);
            }
        }
© www.soinside.com 2019 - 2024. All rights reserved.