C#比对两个CSV导入的列表 筛选条形码匹配的共有条目
C# CSV条码匹配实现方案
你之前的匹配方案失效,大概率是两个原因:一是没有对条码做格式标准化,两边条码存在空格、特殊字符、大小写差异导致匹配不上;二是嵌套循环遍历的写法逻辑容易出错、性能差。可以按下面的步骤实现:
1 前置准备
首先确认商品类的字段映射和CSV表头完全匹配,避免读取阶段就丢了条码数据。如果CSV表头是小写的description/barcode/price,可以给属性加CsvHelper的映射特性,或者直接把属性名改成和表头一致。
using CsvHelper; using CsvHelper.Configuration.Attributes; using System.Globalization; // 通用商品模型 public class Product { [Name("description")] public string Description { get; set; } [Name("barcode")] public string Barcode { get; set; } [Name("price")] public decimal Price { get; set; } }
2 读取两份CSV文件
分别读取每日更新文件和静态基准文件的数据:
// 读取每日更新CSV List<Product> dailyProducts; using (var dailyReader = new StreamReader(@"C:\path\to\Prices - Sheet1.csv")) using (var dailyCsv = new CsvReader(dailyReader, CultureInfo.InvariantCulture)) { dailyProducts = dailyCsv.GetRecords<Product>().ToList(); } // 读取静态基准CSV List<Product> staticProducts; using (var staticReader = new StreamReader(@"C:\path\to\StaticPrices.csv")) using (var staticCsv = new CsvReader(staticReader, CultureInfo.InvariantCulture)) { staticProducts = staticCsv.GetRecords<Product>().ToList(); }
3 条码标准化与匹配
不要用嵌套foreach逐行比对,先把静态文件的条码做标准化处理后存入HashSet,匹配的时间复杂度可以降到O(1),整体效率远高于嵌套循环。
// 条码标准化:处理前后空格、无关分隔符、大小写差异等常见匹配问题 string NormalizeBarcode(string rawBarcode) { if (string.IsNullOrWhiteSpace(rawBarcode)) return string.Empty; return rawBarcode.Trim() .Replace(" ", "") .Replace("-", "") .ToLowerInvariant(); } // 构建静态条码的哈希集合 HashSet<string> staticBarcodeSet = new HashSet<string>( staticProducts.Select(p => NormalizeBarcode(p.Barcode)) ); // 生成带匹配标记的结果 var matchedResult = dailyProducts.Select(product => new { product.Description, product.Barcode, product.Price, IsMatched = staticBarcodeSet.Contains(NormalizeBarcode(product.Barcode)) }).ToList();
额外说明
- 如果你需要同时获取静态文件中对应条码的商品数据(比如做价格对比),可以把
HashSet换成Dictionary<string, Product>,key存标准化后的条码,value存对应的静态商品对象,匹配时直接取值即可,不需要二次遍历。 - 如果静态文件存在重复条码,先按业务规则做去重再构建哈希集合,避免匹配逻辑异常。
- 若读取时出现字段为空的问题,先检查CSV文件的编码、表头行是否和模型属性映射一致,必要时可以在CsvReader配置里指定是否跳过表头注释、空行。
内容的提问来源于stack exchange,提问作者Jack Petrou
相关产品推荐
相关产品推荐

