首页 > 解决方案 > 如何加快对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 对两个列表进行预排序,现在处理需要几秒钟而不是几小时!感谢堆栈溢出!

标签: c#linqcsvlarge-data

解决方案


从以下位置构建字典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;
    }
}

推荐阅读