首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.Net核心检查现有Ids的最快方法(大型数据集)

.Net核心检查现有Ids的最快方法(大型数据集)
EN

Stack Overflow用户
提问于 2022-06-23 17:06:15
回答 1查看 66关注 0票数 1

每周运行一次后台服务,检查导出文件,其中包含可能需要合并到数据库中的I列表。目前我的数据库里有大约350万条记录。

在从文件中获得所有可能的新id之后,我做的第一件事就是检查id是否已经在数据库中。这张支票大约需要9-10分钟才能完成。这是一个背景工作,所以它不是世界末日,我只是想知道它是否可以更有效率。

以下是我目前使用的方法(似乎是我找到的最快的方法)

代码语言:javascript
复制
var newIds = new List<int>();     
var existingIds = _context.{currentRecords}.Select(i => i.Id).ToList();
var ingestIds = ingestList.Select(i => i.Id).ToList();
newIds = ingestIds.Where(id => !existingIds.Contains(id)).ToList();

其他我尝试过的更慢的东西

代码语言:javascript
复制
foreach (var id in ingestIds)
{
   if (!_context.{currentRecords}.Any(i => i.Id == id)) newIds.Add(id);
}

我尝试过其他几种基于搜索的略有不同的方法,但它们都比较慢,显然我把代码放错了。任何帮助都是非常感谢的!谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-24 23:11:12

我想问题是你把所有的数据都交给了客户端。也许你可以试试这个;

代码语言:javascript
复制
    List<TKey> ingestIds = ingestList.Select(i => i.Id);

    var existingIds = _context.{currentRecords}.Where(i => ingestIds.Contains(i.Id)).Select(i => i.Id).ToList();

    var newIds = ingestIds.Except(existingIds);

这将在数据库中执行whereselect操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72734068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档