我想从数据库表中不存在的输入列表中获取项目。
我通过一个列表 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
如果你不想使用 !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);
}
}
我想你可以这样查询。
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);
}
}