c# - 如何加快对csv导入列表的linq查询
问题描述
我的任务是匹配 170 万条记录和一些结果,这些结果在 csv 文件中传递给我。
下面代码的一点背景,我有两个列表......
包含 5 个属性的证书,其 ID 相当于 PK。
包含应包含在证书列表中的 ID 列表的订单。
我需要匹配这两者并对找到的那些 Cert 对象做一些事情。
foreach (Classes.CertOrder.IDS OrderUnitID in Order.AllIDs)
{
var Cert = (from C in Certs where C.ID.ToUpper() == OrderUnitID.ID.ToUpper() select C).FirstOrDefault();
if (Cert != null)
{
Output.add(Cert)
OrderUnitID.fulfilled = true;
}
}
这段代码可以工作,但它的速度非常慢(我猜是记录的数量)有什么办法可以加快速度吗?
编辑到添加,希望能够将数据添加到 SQL 服务器以运行查询,但是数据不允许离开正在处理文件的工作站,甚至不允许触摸磁盘未加密的形式。
结合下面的有用答案,我将输出更改为基于列表,按 ID 对两个列表进行预排序,现在处理需要几秒钟而不是几小时!感谢堆栈溢出!
解决方案
从以下位置构建字典Certs
:
var certsMapping = Certs
.ToDictionary(_ => _.ID.ToUpper());
foreach (Classes.CertOrder.IDS OrderUnitID in Order.AllIDs)
{
if (certMapping.TryGetValue(OrderUnitID.ID.ToUpper(), out var cert))
{
Output.add(cert);
OrderUnitID.fulfilled = true;
}
}
推荐阅读
- c# - 如何从元素中获取子元素数组?
- mysql - 基于计算的 CloudSQL 模型的表上的 Google AppMaker 可过滤列
- angular - 无法将验证组件添加到表单组件。显示错误无法绑定到“控件”,因为它不是“应用程序错误消息”的已知属性
- vue.js - 使用 Quasar 作为 Nuxt(VUE) 插件 - 但图标集未显示在 QBtn (icon="mail") 上,如何纠正它?
- json - ObjectMapper.writeValueAsString JsonMappingException:延迟初始化失败
- gcc - Make:中断/异常被捕获
- common-lisp - 如何在 Common Lisp 中的声卡上播放 FM 解调样本?
- python - 为什么 matplotlib 曲面图看起来像一条线?
- node.js - 寻找一种基于另一个集合的集合从另一个集合返回文档的方法,MongoDB
- python - 如何根据数据框的图像编号列分隔文件夹中的图像?